情况:我有一个使用UTF-8作为其内部字符串格式的外部DLL。接口函数都使用PAnsiChar传递字符串。
我的应用程序的其余部分使用Delphi的本机string
类型。因为我使用的是Delphi 2010,所以它将映射为UnicodeString
。
如何可靠地将那些PAnsiChar参数(指向UTF-8编码的字符串)强制转换为UnicodeString?
我有这个功能,我认为效果很好:
function PUTF8CharToString(Text: PAnsiChar): string;
var
UText: UTF8String;
begin
UText := UTF8String(Text);
Result := string(UText);
end;
...但是现在我遇到了结果字符串损坏的情况;当我将PAnsiChar保存到文件中时,就可以了;但是当我使用上述函数保存转换后的结果字符串时,它已损坏。
还是应该正常工作,这是否表明存在其他内存分配问题?
编辑:我终于设法通过将转换后的字符串分配给局部变量字符串来摆脱内存损坏,而不是直接将其传递给另一个函数。
最佳答案
从系统:
函数UTF8ToUnicodeString(const S:PAnsiChar):UnicodeString;超载;
UnicodeStr:= System.Utf8ToUnicodeString(Text);