2010-10-22 25 views
1

J'ai lu la chaîne "ñîôč˙" à partir du fichier en utilisant la page de codes windows-1251, au lieu d'utiliser iso-8859-2. Ça devrait être une chaîne cyrillique. Comment mettre en œuvre la fonction qui fera suite en C#:Récupérer de l'utilisation de la mauvaise page de code en C#

string res = Recover("ńîôč˙"); 

string Recover(string input) 
{ 
    ??? 
} 

Où res est une chaîne cyrillique que j'aurais eu si je bonne page lorsque la lecture du fichier en premier lieu.

+0

Comment comptez-vous identifier quand le codage est incorrect? – annakata

+0

Je regardais la chaîne dans le débogage, et cela fonctionne. – watbywbarif

Répondre

5

Du haut de ma tête ..

string Recover(string input) 
{ 
    return Encoding.GetEncoding("iso-8859-2").GetString(Encoding.GetEncoding(1251).GetBytes(input)); 
} 
+0

Ah! Ce n'était pas une erreur en mon nom alors, c'était moi copiant de la question :) –

+0

Heh, j'ai essayé cela, mais l'erreur n'était pas dans la procédure, je ne connaissais pas le codage original et j'ai supposé le mauvais. Mon cas était 1251 -> 1250; – watbywbarif

4

Vous pouvez utiliser les méthodes de la classe System.Text.Encoding:

using System.Text; 
using System; 

class EncodingConverter 
{ 
    static string ConvertEncoding(string input, 
     Encoding srcEncoding, 
     Encoding targetEncoding) 
    { 
     byte[] buffer = srcEncoding.GetBytes(input); 
     return targetEncoding.GetString(buffer); 
    } 

    static void Main(string[] args) 
    { 
     string input = args[0]; 
     string converted = ConvertEncoding(input, 
      Encoding.GetEncoding("windows-1250"), 
      Encoding.GetEncoding("iso-8859-2")); 
     Console.WriteLine(converted); 
    } 
}