У меня вопрос о коде, который мне нужно преобразовать строки UTF8 в строки ANSI. Мой код работает для акцентов в гласных, но с буквой Ѕ он не работает. Код разбивает строку. Как я могу исправить эту ошибку?Преобразование UTF8 в ANSI (ISO-8859-1) в Delphi
Строка Я имею в UTF8: EDIFICIO PEÃ'AS BLANCAS
Строка я бы в ANSI, если правильно: EDIFICIO Penas BLANCAS
Строка Я имею в ANSI в настоящее время: EDIFICIO PE
Кодекса находится здесь:
function TFormMain.convertir_utf8_ansi(const Source: string):string;
var
Iterator, SourceLength, FChar, NChar: Integer;
begin
Result := '';
Iterator := 0;
SourceLength := Length(Source);
while Iterator < SourceLength do
begin
Inc(Iterator);
FChar := Ord(Source[Iterator]);
if FChar >= $80 then
begin
Inc(Iterator);
if Iterator > SourceLength then break;
FChar := FChar and $3F;
if (FChar and $20) <> 0 then
begin
FChar := FChar and $1F;
NChar := Ord(Source[Iterator]);
if (NChar and $C0) <> $80 then break;
FChar := (FChar shl 6) or (NChar and $3F);
Inc(Iterator);
if Iterator > SourceLength then break;
end;
NChar := Ord(Source[Iterator]);
if (NChar and $C0) <> $80 then break;
Result := Result + WideChar((FChar shl 6) or (NChar and $3F));
end
else
Result := Result + WideChar(FChar);
end;
end;
Спасибо.
Какая версия Delphi? - от него зависит оптимальное решение. Добавьте соответствующий тег. –
Первая строка, которую вы используете, не отображается как UTF-8. Это байты с кодировкой UTF-8, которые * интерпретируются как * что-то еще, возможно, ISO-8859-1 или Windows-1252. Если вы впервые интерпретировали свои байты UTF-8 как UTF-8, у вас, вероятно, не возникло бы этой проблемы. Что вы должны исследовать, откуда пришел «Источник» и почему это неправильно. –
Звучит ужасно, как будто вы задали неправильный вопрос и попали в классическую проблему XY. –