我在这里发现了类似的主题,但是他们都没有解决我的问题,所以我在新线程中提问。使用FreePascal将AnsiString转换为Lazarus中的UnicodeString
几天前,我改变了格式,我正在开发的应用程序的首选项从INI保存到JSON。
我为此使用了jsonConf单元。
我用来在文件中保存键值对的代码示例如下所示。
Procedure TMyClass.SaveSettings();
var
c: TJSONConfig;
begin
c:= TJSONConfig.Create(nil);
try
c.Filename:= m_settingsFilePath;
c.SetValue('/Systems/CustomName', m_customName);
finally
c.Free;
end;
end;
在我的代码中,m_customName是一个AnsiString类型的变量。 TJSONConfig.SetValue过程要求键和值都是UnicodeString类型。应用程序编译罚款,但我得到警告,这样
Warning: Implicit strung type conversion from "AnsiString" to "UnicodeString".
一些消息警告说有一个潜在的数据丢失。
当然,我可以去把所有东西都改成UnicodeString类型,但这太冒险了。到目前为止,我没有看到任何问题,因为它们忽略了这些警告,但它们一直显示,并且可能会在不同的PC上引发问题。
我该如何解决这个问题?
为什么你不使用'string'到处? –
然后它会抱怨'警告:隐式字符串类型从“ShortString”转换为“UnicodeString”'。 –
为什么'string'是ShortString的别名?我不明白你为什么要使用'ShortString'和'AnsiString'。 –