情况:我有一个外部DLL,它使用UTF-8作为其内部字符串格式。接口函数都使用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文件时,它很好;但是当我使用上面的函数在转换后保存结果字符串时,它已经损坏了。
或者应该这项工作是否正确,这是否表示其他一些内存(de)分配问题?
编辑: 我终于设法通过将转换后的字符串分配给局部变量字符串来摆脱内存损坏,而不是直接将其传递给另一个函数。 / p>
答案 0 :(得分:3)
来自系统:
function UTF8ToUnicodeString(const S:PAnsiChar):UnicodeString;过载;
UnicodeStr:= System.Utf8ToUnicodeString(Text);
答案 1 :(得分:0)
尝试使用SetString()而不是强制转换:
function PUTF8CharToString(Text: PAnsiChar): string;
var
UText: UTF8String;
begin
SetString(UText, Text, StrLen(Text));
Result := UText;
end;