Delphi XE7:如何使XSuperObject输出重音字符?

时间:2015-11-04 21:56:24

标签: json delphi ascii utf-16 xsuperobject

uses
  ...
  XSuperObject;

procedure TForm1.Button1Click(Sender: TObject);
var
  Json: ISuperObject;
begin
  Memo1.Lines.Add('{"Evênements":"Noël"}');
  Json := SO('{"Evênements":"Noël"}');
  Memo1.Lines.Add(Json.AsJSON(True));
end;

此代码在Memo1中生成以下输出:

{"Evênements":"Noël"}
{
  "Ev\u00eanements":"No\u00ebl"
}

为什么我在输出中输入\ u00e和\ u00eb,我该怎么做才能获得正确的重音字符?

1 个答案:

答案 0 :(得分:0)

根据我对代码的阅读,图书馆无法提供您所寻求的内容。使用XSuperJSON.pas中的StrToUTF16生成字符串,并对该函数进行编码,以将所有非ASCII字符转换为您问题中观察到的反斜杠转义格式。

该功能在技术上产生UTF-16,但仅因为ASCII(每个字符扩展到16位)是UTF-16的子集。我认为您应该file an issue with the project请求更典型的JSON序列化。

您可以完全省略ChrToUTF16函数,几乎所有输入都可以。

就JSON而言,你得到的输出很好。它是完全有效的JSON,并且将回读字符串以产生与您开始时相同的值。如果您不希望人类手动阅读或编辑此JSON,那么您不必担心它。