Ситуация: у меня есть внешняя 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 в файл, это нормально;но когда я сохраняю полученную строку после преобразования, используя вышеуказанную функцию, она повреждена.
Или должно работать правильно, и свидетельствует ли это о какой-то другой проблеме выделения памяти (де)?
Редактировать: Мне наконец удалось избавиться от повреждения памяти, назначив преобразованную строку в строку локальной переменной, вместо прямой передачи ее другойфункция.