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ù 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