utf8decode в Delphi 7 - PullRequest
       17

utf8decode в Delphi 7

5 голосов
/ 07 февраля 2012

Мне нужно использовать Delphi 7 для преобразования строк из utf8 в widestring.Может кто-нибудь сказать мне, почему следующий код не работает в Delphi 7?Параметр функции Utf8Decode - это просто пример.

var ws: WideString;
begin
   ws := Utf8Decode('[أمبير] خطأ تيار- تيار Ů…ŘŞŮاصل Ů…Ř·Ů„Ů‚');
end;

В Delphi 7 он дает мне много вопросительных знаков, однако в bds2006 он работает хорошо.

Нужно ли переключать некоторыедиректива компилятора или как я могу преобразовать utf8String в Widestring в delphi 7?

SOLUTION

Нет ничего плохого в функции Utf8Decode, выражении Delphi Code Insight Tooltipвывод оценки ввел меня в заблуждение, что не может отображать Widestrings.см. изображение ниже:

Tooltip expression evaluation

, но MessageBoxW может отображать текст:

enter image description here

1 Ответ

6 голосов
/ 07 февраля 2012

Я считаю, что проблема в том, что Delphi 7 может использовать только ANSI для исходных файлов. Более поздние версии Delphi будут использовать UTF-8 для исходных файлов, и фактически вы можете указать, какую кодировку вы хотите использовать для своих исходных файлов.

Если вы интерпретируете строку в кодировке UTF-8 как ANSI (например, с помощью Notepad ++), то вы можете встроить литерал в кодировке UTF-8 в файл исходного кода ANSI. Например, этот код создает окно сообщения с вашим текстом в Delphi 6.

ws := UTF8Decode('[ŘÅمبير] خط؊تيار- تيار Ů…ŘŞŮاصل Ů…Ř·Ů„Ů‚');
MessageBoxW(0, PWideChar(ws), 
  PWideChar(WideString(FloatToStr(CompilerVersion))), 0);

enter image description here

Попытка обработать ваши строковые литералы таким образом просто не практична. Возможно, вам нужно начать размещать их в ресурсах.

...