1
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 ,我应该怎么做才能得到正确的重音字符?

4

1 回答 1

0

根据我对代码的阅读,该库无法满足您的需求。字符串是StrToUTF16XSuperJSON.pas中生成的,并且该函数被编码为将所有非 ASCII 字符转换为您问题中观察到的反斜杠转义格式。

该函数在技术上产生 UTF-16,但仅仅是因为 ASCII 扩展为每个字符 16 位,是 UTF-16 的子集。我认为您应该向项目提交问题以请求更典型的 JSON 序列化。

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

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

于 2015-11-04T23:35:37.613 回答