Delphi 2010: как конвертировать PAnsiChar в кодировке UTF8 в UnicodeString?
Ситуация: у меня есть внешняя 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 в файл, все нормально; но когда я сохраняю полученную строку после преобразования, используя вышеуказанную функцию, она повреждена.
Или это должно работать правильно, и свидетельствует ли это о какой-то другой проблеме выделения памяти?
Редактировать: мне наконец удалось избавиться от повреждения памяти, назначив преобразованную строку в строку локальной переменной, вместо прямой передачи ее другой функции.
2 ответа
Из системы:
function UTF8ToUnicodeString (const S: PAnsiChar): UnicodeString; перегрузки;
UnicodeStr: = System.Utf8ToUnicodeString (Text);
Попробуйте использовать SetString() вместо приведения:
function PUTF8CharToString(Text: PAnsiChar): string;
var
UText: UTF8String;
begin
SetString(UText, Text, StrLen(Text));
Result := UText;
end;