2015-12-07 4 views
0

Когда я использую UTF8ToAnsi в этой строке, результат пуст. Любая идея, почему это может быть?Ошибка Delphi UTF8ToAnsi

msgstr "2. Broughton, PMG.^IJournal Automatic Chemistry.^N^lVol 6. Нет 2. (апрель - июнь 1984 г.) стр. 94-95."

Это демонстрирует проблему:

procedure TForm1.FormShow(Sender: TObject); 
begin 
Memo1.Lines.Text := 
    '<<' + 
    UTF8ToANSI('msgid "2. Broughton, PMG. ^iJournal of Automatic Chemistry.^n^lVol 6. No 2. (April – June 1984) pp 94-95."') + 
    '>>'; 
end; 

, который производит

"< < >>"

ответ

2

Ваш код не работает, потому что то, что вы передаете, не кодируется в кодировке UTF-8. То, что вы передаете этой функции, на самом деле кодируется ANSI. Когда Utf8Decode получает этот текст, он пытается его декодировать, и когда он встречает искаженные байты, байты, которые не являются UTF-8, он сбрасывает и возвращает пустую строку.

Характер проблемы - тире в Апрель - Июнь 1984, который является n-тире. В ANSI, который кодируется как #150. Когда вы пытаетесь интерпретировать это как UTF-8, то #150 не является одной байтовой кодировкой символа и также является недопустимым в качестве первого байта многобайтовой последовательности. Отсюда и провал.

Чтобы решить вашу проблему, вам нужно будет решить, почему у вас есть данные, которые не являются UTF-8, в месте, где вы ожидаете UTF-8.

1

Utf8ToAnsi возвращает пустую строку, если вход не является допустимым UTF-8 (например, с неполным многобайтовым символом или некорректным конечным байтом). Вы можете отлаживать свою программу, чтобы узнать, что ваша строка действительно содержит. У вас, очевидно, есть проблема в том, как вы получаете строку ввода. Возможно, вы неправильно интерпретируете UTF-8, или, возможно, у вас никогда не было UTF-8.

1

Черта, используемая вами с апреля по июнь, недействительна UTF8. Поэтому он не может быть правильно декодирован. Это не сразу видно, но символ, который вы использовали здесь, не обычный минус, а другой символ.

+0

Именно так. Excel преобразовывал «обычные» символы в другие символы. Спасибо за такой острый глаз! – user3586403

 Смежные вопросы

  • Нет связанных вопросов^_^