Delphi XE7:如何使 XSuperObject 输出重音字符?
Delphi XE7: How can I make XSuperObject output accented characters?
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"
}
为什么我在输出中得到 \u00ea 和 \u00eb,我应该怎么做才能得到正确的重音字符?
根据我对代码的阅读,该库无法提供满足您要求的方法。在 XSuperJSON.pas 中使用 StrToUTF16
生成字符串,并且该函数被编码为将所有非 ASCII 字符转换为您的问题中观察到的反斜杠转义格式。
该函数在技术上产生 UTF-16,但这只是因为扩展到每个字符 16 位的 ASCII 是 UTF-16 的子集。我认为你应该 file an issue with the project 请求更典型的 JSON 序列化。
您可以完全省略 ChrToUTF16
函数,几乎所有输入都可以。
就JSON而言,你得到的输出是好的。它完全有效 JSON,字符串将被读回以产生与您开始时相同的值。如果您不希望有人手动阅读或编辑此 JSON,那么您不必担心。
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"
}
为什么我在输出中得到 \u00ea 和 \u00eb,我应该怎么做才能得到正确的重音字符?
根据我对代码的阅读,该库无法提供满足您要求的方法。在 XSuperJSON.pas 中使用 StrToUTF16
生成字符串,并且该函数被编码为将所有非 ASCII 字符转换为您的问题中观察到的反斜杠转义格式。
该函数在技术上产生 UTF-16,但这只是因为扩展到每个字符 16 位的 ASCII 是 UTF-16 的子集。我认为你应该 file an issue with the project 请求更典型的 JSON 序列化。
您可以完全省略 ChrToUTF16
函数,几乎所有输入都可以。
就JSON而言,你得到的输出是好的。它完全有效 JSON,字符串将被读回以产生与您开始时相同的值。如果您不希望有人手动阅读或编辑此 JSON,那么您不必担心。