JSON 之 SuperObject(8): 关于乱码的几种情况 - 向 Henri Gourvest 大师报告
这几天学习 JSON - SuperObject, 非常幸运地得到了其作者 Henri Gourvest 大师的同步指点! (Henri 大师也是 DSPack 和 GDI+ 头文件的作者; 大师是法国人, 竟能用中文给我回复, 没想到!).
学习中发现 SuperObject 有些地方对中文(或者说 Unicode)支持不是所期望的, 现在专贴提出来供大师鉴别.
以下例子都会出现乱码, 虽然都可以有变通的方案, 但如果不乱码就太好了!
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} uses SuperObject; procedure TForm1.Button1Click(Sender: TObject); var jo: ISuperObject; stream: TStream; begin stream := TMemoryStream.Create; jo := SO('{"Language" : "简体中文"}'); jo.SaveTo(stream, False, False); stream.Position := ; Memo1.Lines.LoadFromStream(stream); // {"Language":"€S-?} stream.Free; end; procedure TForm1.Button2Click(Sender: TObject); const FilePath = 'C:\Temp\Test.txt'; var jo: ISuperObject; begin jo := SO('{"Language" : "简体中文"}'); jo.SaveTo(FilePath, False, False); with TStringList.Create do begin LoadFromFile(FilePath); ShowMessage(Text); // {"Language":"€S-?} Free; end; end; procedure TForm1.Button3Click(Sender: TObject); var jo: ISuperObject; stream: TStream; begin stream := TStringStream.Create('{"Language" : "简体中文"}'); jo := TSuperObject.ParseStream(stream); ShowMessage(jo.AsJSon(False, False)); // {"Language":"¼òÌåÖÐÎÄ"} stream.Free; end; procedure TForm1.Button4Click(Sender: TObject); const FilePath = 'C:\Temp\Test.txt'; var jo: ISuperObject; begin with TStringList.Create do begin Add('{"Language" : "简体中文"}'); SaveToFile(FilePath); Free; end; jo := TSuperObject.ParseFile(FilePath); ShowMessage(jo.AsJSon(False, False)); // {"Language":"¼òÌåÖÐÎÄ"} end; end.
下面是以上问题的暂时的变通方案:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} uses SuperObject; procedure TForm1.Button1Click(Sender: TObject); var jo: ISuperObject; stream: TStream; begin stream := TMemoryStream.Create; jo := SO('{"Language" : "简体中文"}'); jo.SaveTo(stream, False, True); stream.Position := ; Memo1.Lines.LoadFromStream(stream); // {"Language":"\u7b80\u4f53\u4e2d\u6587"} stream.Position := ; jo := TSuperObject.ParseStream(stream); ShowMessage(jo.AsString); //{"Language" : "简体中文"} stream.Free; end; procedure TForm1.Button2Click(Sender: TObject); const FilePath = 'C:\Temp\Test.txt'; var jo: ISuperObject; begin jo := SO('{"Language" : "简体中文"}'); jo.SaveTo(FilePath, False, True); with TStringList.Create do begin LoadFromFile(FilePath); ShowMessage(Text); // {"Language":"\u7b80\u4f53\u4e2d\u6587"} Free; end; end; procedure TForm1.Button3Click(Sender: TObject); var jo: ISuperObject; stream: TStream; begin stream := TStringStream.Create('{"Language":"\u7b80\u4f53\u4e2d\u6587"}'); jo := TSuperObject.ParseStream(stream); ShowMessage(jo.AsJSon(False, False)); // {"Language" : "简体中文"} stream.Free; end; procedure TForm1.Button4Click(Sender: TObject); const FilePath = 'C:\Temp\Test.txt'; var jo: ISuperObject; begin with TStringList.Create do begin Add('{"Language" : "简体中文"}'); SaveToFile(FilePath); Free; end; Memo1.Lines.LoadFromFile(FilePath); jo := SO(Memo1.Text); // jo := TSuperObject.ParseFile(FilePath); ShowMessage(jo.AsJSon(False, False)); // {"Language" : "简体中文"} end; end.
JSON 之 SuperObject(8): 关于乱码的几种情况 - 向 Henri Gourvest 大师报告的更多相关文章
- 【乱码】Request QueryString 编码,传值乱码的几种情况和解决办法(单页,多页)
自己的项目还好,合作接口神马的传值乱码是很常见的. 遇到了几次这种恶心情况,积累了一点经验,有不对的地方欢迎指正. 乱码原因: 一般来说,常用的编码不是utf-8就是gb2312,一样的 HttpUt ...
- 怎么设置tomcat在get请求的中文也不乱码?两种情况下配置
我们都知道,get请求和post请求的一个比较显著区别就是,在使用post请求的时候,中文不会乱码,但是在使用get请求的时候,如果url后面带有中文就会乱码了.那么这个怎么解决呢? 前提:配置项目的 ...
- JSON 之 SuperObject(1)
一直盼着 Delphi 能够直接支持 "正则表达式" 与 "JSON"; Delphi 2009 刚来的时候, 有了 JSON, 但不好, 那时尝试过一点. 这 ...
- JSON 之 SuperObject(11): TSuperTableString、TSuperAvlEntry
JSON 之 SuperObject(11): TSuperTableString.TSuperAvlEntry - 万一 - 博客园http://www.cnblogs.com/del/archiv ...
- 解决springboot序列化 json数据到前端中文乱码问题
前言 关于springboot乱码的问题,之前有文章已经介绍过了,这一篇算是作为补充,重点解决对象在序列化过程中出现的中文乱码的问题,以及后台报500的错误. 问题描述 spring Boot 中文返 ...
- pythonl输出的预警消息中的json串的中文展示乱码(中文的unicode码)
来源:ctrip接口名称:ReviewStandartAPI错误信息:[{'ReviewTime': u'\u63a5\u53e3\u8fd4\u56de\u7684\u70b9\u8bc4\u65f ...
- Get请求中文乱码的几种解决方式
1.将字符串转码:new String("xxxxx".getBytes("iso-8859-1"),"utf-8") 这种 ...
- 关于遍历javascript 中的json串浏览器输出的结果不统一的情况
我们在做项目的时候经常会用到javascript的json. 首先说一下javascript的json串是什么,json串属于javascript的一个对象,有键和值对应的对象. 一般的格式是: a ...
- 【亲测有效】Win10家庭版Microsoft Edge页面出现乱码的两种解决方案及gpedit.msc命令无法使用的解决策略
昨天在爬取电影的时候生成的表单打开result.html时,发现页面出现如下乱码: 第一种方法: 上网找了半天,网上的解决方案是这样的: 1.Win + R输入gpedit.msc打开组策略编辑器; ...
随机推荐
- HOWTO: Create native-looking iPhone/iPad applications from HTML, CSS and JavaScript
HOWTO: Create native-looking iPhone/iPad applications from HTML, CSS and JavaScript Though it's not ...
- 索引服务混战ASP.NET――微软的又一个隔离墩
话说月初笔者在华山之巅搞定了ASP.NET一起莫名奇妙的异常,自此之后和公主过着…嘟--,不好意思,书都看杂了,串了台了.好,咱们闲言少叙,书归正传. 自从上次解决了由调试文件库引起的ASP.NET执 ...
- jQuery一些常用特效方法使用实例
1. jQuery fadeIn() 用于淡入已隐藏的元素. 语法: $(selector).fadeIn(speed,callback); 实例: $("button").cli ...
- iOS-xib(使用XIB实现嵌套自定义视图)
参考:http://wtlucky.github.io/geekerprobe/blog/2014/08/10/nested-xib-views/?utm_source=tuicool 因为主要练习x ...
- iOS工程预编译文件的创建
在搜索 添加工程名/自己的pch文件名记住加后缀
- Android的事件处理机制详解(二)-----基于监听的事件处理机制
基于监听的事件处理机制 前言: 我们开发的app更多的时候是需要与用户的交互----即对用户的操作进行响应 这就涉及到了android的事件处理机制; android给我们提供了两套功能强大的处理机制 ...
- iOS多线程的初步研究(九)-- dispatch源
dispatch源(dispatch source)和RunLoop源概念上有些类似的地方,而且使用起来更简单.要很好地理解dispatch源,其实把它看成一种特别的生产消费模式.dispatch源好 ...
- 2014多校第三场1005 || HDU 4891 The Great Pan(模拟)
题目链接 题意 : 给你n行字符串,问你有多少种理解方式.有两大类的理解 (1){A|B|C|D|...}代表着理解方式可以是A,可以是B或C或者D. (2)$blah blah$,在$$这两个符号中 ...
- hdu 1526(最大匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1526 思路:floyd求传递闭包,然后就是最大匹配了,不过一开始输入没看清,被坑了将近2个小时. #i ...
- linq 常用语句
自己练习的 switch (productDataAnalysisQuery.DataType) { : var data = (from hp in GPEcontext.hbl_product j ...