【发布时间】:2016-09-27 07:13:09
【问题描述】:
我在这里找到了类似的主题,但没有一个能解决我的问题,所以我在一个新线程中提问。
几天前,我将保存我正在开发的应用程序的首选项的格式从 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。 -
我认为前进的方向是让您停止在黑暗中这样做,并了解 FPC 中如何处理字符串。试图在没有获得知识的情况下继续前进是不可能有成效的。
-
我只使用 Lazarus/fpc,但这个问题对我来说仍然很混乱。对此进行了很多讨论。我的印象是当前版本 1.6 及更高版本使用“字符串”透明地处理所有这些。但是要问的人真的在这里:forum.lazarus.freepascal.org/index.php?action=forum 或在邮件列表中,但邮件列表与大多数开发相关。
标签: lazarus freepascal ansistring