gpt4 book ai didi

json - 当我使用 SuperObject 解析字符串时,为什么会出现大量问号?

转载 作者:行者123 更新时间:2023-12-01 19:22:22 24 4
gpt4 key购买 nike

我正在尝试使用 Delphi 7 中的 SuperObject 解析该字符串。

procedure TForm1.btn1Click(Sender: TObject);
var
obj: ISuperObject;
fw:string;
begin
fw:= '{"type":"normal","info":{"Name":"frank","Number":"01","Age":"21","registered":"Yes","Support":"Expired"}}';
obj := TSuperObject.ParseString(PWideChar(fw), false);
mmo1.lines.Add(obj.AsJSon(true,false));
end;

但是备忘录中的结果是这样的:

"????????????????????????????????????????????????????}"

我做错了什么?

最佳答案

fw 是一个字符串,在 Delphi 7 中是 8 位 ANSI 编码的。因此,转换为 PWideChar 是不正确的。它将把 8 位文本视为 UTF-16 编码。

如果您调用的函数确实接收了 PWideChar,那么您需要先转换为 UTF-16。例如这样:

PWideChar(WideString(fw))
<小时/>

您还报告了 super 对象代码中出现的一个单独问题。具体来说这行代码:

h := h*129 + ord(k[i]) + $9e370001;

引发溢出错误。

发生这种情况是因为您的项目启用了溢出检查选项(这样做的好习惯),但 super 对象代码是在禁用该选项的假设下编写的。这确实是 super 对象代码中的一个缺陷。您可以通过添加 {$OVERFLOWCHECKS OFF} 禁用 super 对象代码中的溢出检查来解决此问题。理想情况下,仅针对故意溢出的代码在本地禁用此功能。但是,除非您完全理解代码,否则将 {$OVERFLOWCHECKS OFF} 填充到单元顶部并继续前进可能会更容易。

现在,我正在查看最新的 super 对象代码,单元顶部是 {$OVERFLOWCHECKS OFF}。所以我想知道您是否可能使用过时版本的代码。从存储库中提取最新版本。

关于json - 当我使用 SuperObject 解析字符串时,为什么会出现大量问号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18915881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com