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打开组策略编辑器; ...
随机推荐
- Mrt render
mutil render target Pixel shder输出一个结构体 Out.f4Color Out.f4Normal 这步在渲染物体的shader里 在application setcolo ...
- web项目首页提示404
我也是服了,估计是项目有问题,只能找jsp,找不到html和htm.把list中多余的都删掉,只保留index.jsp <welcome-file-list> <welcome-fi ...
- ibatis中iterate的用法(conjunction="or" ",")
例子一 查询条件dto public class queryCondition{ private String[] stuIds; private String name;} 查询sqlMap < ...
- BZOJ2961: 共点圆
好久没发了 CDQ分治,具体做法见XHR的论文… /************************************************************** Problem: 29 ...
- 去“IOE”
所谓去“IOE”,是对去“IBM.Oracle.EMC”的简称,三者均为海外IT巨头,其中IBM代表硬件以及整体解决方案服务商,Oracle代表数据库,EMC代表数据存储.去“IOE”策略更广泛的理解 ...
- Libevent详细说明
文章来自官方文档的部分翻译:http://www.wangafu.net/~nickm/libevent-book/ 通过这部分的了解,基本上可以使用libevent的常用功能了.有时间建议直接看官方 ...
- 链表(c语言实现)--------------小练习
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_SIZE 100 #d ...
- GCD常用方法
1.延迟操作 2.一次性代码 3.队列组 /** * 延迟执行 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC ...
- poj 2480 Longge's problem 积性函数
思路:首先给出几个结论: 1.gcd(a,b)是积性函数: 2.积性函数的和仍然是积性函数: 3.phi(a^b)=a^b-a^(b-1); 记 f(n)=∑gcd(i,n),n=p1^e1*p2^e ...
- ABP集合帖
http://www.cnblogs.com/kebinet/p/5341663.html http://www.cnblogs.com/farb/p/ABPAdvancedTheoryContent ...