我正在尝试使用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;
但是备忘录的结果是这样的:
“?????????????????????????????????????????????? ??????}“
我做错了什么?
答案 0 :(得分:3)
fw是一个字符串,在Delphi 7中是8位ANSI编码。因此,施放到PWideChar是不正确的。它会将8位文本视为UTF-16编码。
如果您正在呼叫的功能确实接收到PWideChar,那么您需要先转换为UTF-16。例如:
PWideChar(WideString(fw))
您还会报告超级目标代码中出现的单独问题。特别是这行代码:
h := h*129 + ord(k[i]) + $9e370001;
引发溢出错误。
发生这种情况是因为你的项目启用了溢出检查选项(这样做的好习惯),但超级目标代码是在假设选项被禁用的情况下编写的。这实际上是超级目标代码中的一个缺陷。您可以通过添加{$OVERFLOWCHECKS OFF}
来禁用超级目标代码中的溢出检查来解决此问题。理想情况下,对于故意溢出的代码,这将在本地禁用。但是,除非您完全理解代码,否则可能更容易将{$OVERFLOWCHECKS OFF}
填充到设备顶部并继续前进。
现在,我正在查看最新的超级对象代码,并且位于设备顶部的是{$OVERFLOWCHECKS OFF}
。所以我想知道你是否正在使用过时的代码版本。从回购中提取最新版本。
答案 1 :(得分:2)
我在delphi 7中使用SuperObjects1.2.4时遇到了同样的问题。正如很多人所说,解决方案是:获取最新版本。因此,要从存储库中获取最新的SuperObjects版本,请执行以下操作: 1.安装git(http://git-scm.com/) 2.右键单击某个文件夹,选择“Git bash”并粘贴以下内容
git clone https://code.google.com/r/steve-superobject/
完成!