2008-12-03 5 views
4

Comment puis-je lire un fichier texte chinois en utilisant C#, mon code actuel ne peut pas afficher les caractères corrects:Comment lire un fichier texte chinois à partir de C#?

try 
{  
    using (StreamReader sr = new StreamReader(path,System.Text.Encoding.UTF8)) 
    { 
     // This is an arbitrary size for this example. 
     string c = null; 

     while (sr.Peek() >= 0) 
     { 
      c = null; 
      c = sr.ReadLine(); 
      Console.WriteLine(c); 
     } 
    } 
} 
catch (Exception e) 
{ 
    Console.WriteLine("The process failed: {0}", e.ToString()); 
} 

Répondre

9

Vous devez utiliser le bon codage pour le fichier. Savez-vous ce qu'est cet encodage? Il pourrait être UTF-16, alias Encoding.Unicode, ou peut-être quelque chose comme Big5. Vraiment, vous devriez essayer de trouver à coup sûr au lieu de deviner si.

Comme la réponse de Leppie mentionné, le problème pourrait également être les capacités de la console. Pour en être sûr, vider les valeurs de caractères Unicode de la chaîne sous la forme de nombres. Voir mon article on debugging unicode issues pour plus d'informations et une méthode utile pour le vidage du contenu d'une chaîne. J'éviterais également d'utiliser le code que vous utilisez actuellement pour lire un fichier ligne par ligne. Au lieu de cela, utiliser quelque chose comme:

using (StreamReader sr = new StreamReader(path, appropriateEncoding)) 
{ 
    string line; 
    while ((line = sr.ReadLine()) != null) 
    { 
     // ... 
    } 
} 

appel Peek() exige que le flux est capable de chercher, ce qui peut être vrai pour les fichiers, mais pas tous les cours d'eau. Regardez aussi dans File.ReadAllText et File.ReadAllLines si c'est ce que vous voulez faire - ce sont des méthodes utilitaires très pratiques.

1

Utilisez Encoding.Unicode à la place.

Je pense que vous devez changer le OutputEncoding de la console pour l'afficher correctement.

4

Si elle est généralement le chinois simplifié, il est gb2312 et le chinois traditionnel, il est généralement big5:

// gb2312 (codepage 936) : 
System.Text.Encoding.GetEncoding(936) 

// Big5 (codepage 950) : 
System.Text.Encoding.GetEncoding(950)
+0

Réponse plus utile! Merci – CodeGuru

0

Je viens rencontré le même problème que le vôtre et je résous maintenant. Je pense que le principal problème serait de l'éditeur txt. Lorsque vous enregistrez du texte au format .txt à l'aide du bloc-notes, vous pouvez choisir l'encodage en bas. L'encodage par défaut est ANSI qui ne prend pas en charge la lecture de flux en chinois (dépend de votre ordinateur) tandis que Unicode fonctionne pour le texte en chinois. J'espère que cela vous aidera :)

Cheers,

Ronald

Questions connexes