Delphi 2010: как преобразовать PAnsiChar в кодировке UTF8 в UnicodeString? - PullRequest
2 голосов
/ 17 декабря 2010

Ситуация: у меня есть внешняя 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 ]

3 голосов
/ 18 декабря 2010

из системы:

function UTF8ToUnicodeString (const S: PAnsiChar): UnicodeString; перегрузки;


UnicodeStr: = System.Utf8ToUnicodeString (Text);

0 голосов
/ 21 декабря 2010

Попробуйте использовать SetString () вместо приведения:

function PUTF8CharToString(Text: PAnsiChar): string;
var
  UText: UTF8String;
begin
  SetString(UText, Text, StrLen(Text));
  Result := UText;
end;
...