Delphi 2010:如何将 UTF8 编码的 PAnsiChar 转换为 UnicodeString?

Mar*_*ijn 4 delphi string pointers utf-8 delphi-2010

情况:我\xe2\x80\x99有一个使用UTF-8作为其内部字符串格式的外部DLL。接口函数都使用 PAnsiChar 来传递字符串。

\n\n

我的应用程序的其余部分使用 Delphi\xe2\x80\x99s 本机string类型;由于 I\xe2\x80\x99m 使用 Delphi 2010,这将映射到UnicodeString.

\n\n

如何可靠地将这些 PAnsiChar 参数(指向 UTF-8 编码字符串)转换为 UnicodeString?

\n\n

我有这个功能,我认为效果很好:

\n\n
function PUTF8CharToString(Text: PAnsiChar): string;\nvar\n  UText: UTF8String;\nbegin\n  UText := UTF8String(Text);\n  Result := string(UText);\nend;\n
Run Code Online (Sandbox Code Playgroud)\n\n

...但是现在我\xe2\x80\x99遇到了结果字符串损坏的情况;当我将 PAnsiChar 保存到文件时,它 \xe2\x80\x99s 很好;但是当我使用上述函数转换后保存生成的字符串时,它\xe2\x80\x99s 已损坏。

\n\n

或者应该正常工作,这是否表明存在其他内存(取消)分配问题?

\n\n
\n\n

编辑:我最终通过将转换后的字符串分配给局部变量字符串而不是直接将其传递给另一个函数来摆脱内存损坏。

\n

All*_*uer 5

来自系统:

函数 UTF8ToUnicodeString(const S: PAnsiChar): UnicodeString; 超载;


UnicodeStr := System.Utf8ToUnicodeString(文本);