2011-02-26 5 views
1

J'essaie de transformer une chaîne UTF8 en caractères latins.Décoder la chaîne UTF8 en Latin

Voici un exemple de la façon dont je suis en train de réaliser ceci:

string sUnicode ="Peneda-Gerês"; 
string result = Encoding.Unicode.GetString(Encoding.Convert(Encoding.UTF8, Encoding.Unicode, Encoding.UTF8.GetBytes(sUnicode))); 

MessageBox.Show(result); 

Le retour de chaîne est le même? Pas de changement?

Que manque-t-il?

Si je vais à ce site

http://software.hixie.ch/utilities/cgi/unicode-decoder/utf8-decoder

et mettre le même texte, il se décode correctement "Peneda-Gerês";

+2

Vous êtes convertir UTF-8 en UTF-8. Pourquoi cela montrerait-il des chaînes différentes? – Oded

+0

Je préfère mettre les données dans des fichiers texte, et non dans le code source. Cependant, cela ressemble à un UTF-8 cassé (il est "encodé" en UTF-8 "deux fois"), et c'est donc une séquence d'octets cassée qui n'est pas vraiment géniale à mettre dans une chaîne C#. Pourquoi n'utilisez-vous pas un outil externe pour réparer le texte brisé? –

+1

Une chaîne .NET est toujours codée en Unicode (UTF-16), donc votre chaîne d'origine n'est pas UTF-8 ... L'encodage n'a d'importance que si vous lisez ou écrivez dans un flux (ou si vous convertissez la chaîne de/à partir d'un tableau d'octets) –

Répondre

3

Votre chaîne source est dans la norme ISO-8859-1

Exécuter ce et choisir le bon codeur:

string sUnicode = "Peneda-Gerês"; 
foreach (var enc in Encoding.GetEncodings()) 
{ 
    Console.WriteLine("{0} {1}" 
     , Encoding.UTF8.GetString(enc.GetEncoding().GetBytes(sUnicode)) 
     , enc.Name); 
} 

Ou, pour être sur place auprès:

string result = Encoding.UTF8.GetString(
    Encoding.GetEncoding("ISO-8859-1").GetBytes(sUnicode)); 
1

Vous convertissez unicode en utf8 en unicode. Donc, le résultat est le même que la source.

 byte[] byteAr = { 
          (byte) 'P', (byte) 'e', (byte) 'n', (byte) 'e', (byte) 'd', (byte) 'a', (byte) '-', 
          (byte) 'G', (byte) 'e', (byte) 'r', (byte) 'Ã', (byte) 'ª', (byte) 's' 
         }; 

     var result = Encoding.Unicode.GetString(Encoding.Convert(Encoding.UTF8, Encoding.Unicode, byteAr)); 
+0

merci, je comprends maintenant, merci pour la réponse rapide :) –