La conversion UTF8 à la norme ANSI (ISO-8859-1) en Delphi
J'ai une question à propos d'un code que je dois convertir en UTF8 chaînes de chaînes ANSI. Mon code fonctionne pour les accents sur les voyelles, mais avec la lettre -, il ne fonctionne pas. Le code des sauts de la chaîne. Comment puis-je corriger cette erreur?
La chaîne que j'ai en UTF8: EDIFICIO PEÃ AS BLANCAS
La chaîne que j'aurais dans la norme ANSI si elle est correcte: EDIFICIO PEÑAS BLANCAS
La chaîne que j'ai dans la norme ANSI maintenant: EDIFICIO PE
Le code est ici:
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;
Grâce.
Ce que Delphi version? - la solution optimale dépend. Ajouter la balise appropriée.
La première chaîne que vous avez n'est pas affiché en tant que UTF-8. Il est codé en UTF-8 octets étant interprété comme quelque chose d'autre, probablement ISO-8859-1 ou Windows-1252. Si vous aviez interprété votre octets UTF-8 en UTF-8, en premier lieu, il est probable que vous n'aurez pas ce problème. Ce que vous devez examiner est où
Il parle exactement comme vous avez posé la mauvaise question et tombé dans le classique XY problème.
La première chaîne que vous avez n'est pas affiché en tant que UTF-8. Il est codé en UTF-8 octets étant interprété comme quelque chose d'autre, probablement ISO-8859-1 ou Windows-1252. Si vous aviez interprété votre octets UTF-8 en UTF-8, en premier lieu, il est probable que vous n'aurez pas ce problème. Ce que vous devez examiner est où
Source
vient et pourquoi il est faux.Il parle exactement comme vous avez posé la mauvaise question et tombé dans le classique XY problème.
OriginalL'auteur Felipe Ceballos - Desystec | 2015-11-09
Vous devez vous connecter pour publier un commentaire.
Si vous êtes à l'aide de Delphi 2009 ou plus, vous devez laisser le RTL de faire la conversion pour vous:
Si vous êtes à l'aide de Delphi 2007 ou une version antérieure, vous pouvez toujours faire la conversion, il suffit de laisser l'OS le faire pour vous:
OriginalL'auteur Remy Lebeau
J'ai résolu le problème en invoquant, en dehors de la fonction que j'ai eu, la fonction interne UTF8toAnsi. Je suis en train de travailler sur Delphi 2010.
De cette façon:
Utf8toAnsi(convertir_utf8_ansi(source));
OriginalL'auteur Felipe Ceballos - Desystec