2008-12-03 4 views
4

Как я могу прочитать китайский текстовый файл с помощью C#, мой текущий код не может отобразить правильные символы:Как читать китайский текстовый файл с 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()); 
} 

ответ

9

Вам необходимо использовать правильную кодировку для файла. Вы знаете, что такое кодировка? Это может быть UTF-16, иначе Encoding.Unicode, или, возможно, что-то вроде Big5. На самом деле вам следует попытаться выяснить, а не гадать.

Как упоминалось в ответе leppie, проблема может быть связана с возможностями консоли. Чтобы точно узнать, выведите значения символов Unicode строки как числа. См. Мой article on debugging unicode issues для получения дополнительной информации и полезного метода для сброса содержимого строки.

Я бы также избежал использования кода, который вы используете в настоящее время для чтения файла по строкам. Вместо этого следует использовать что-то вроде:

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

Вызов Peek() требует, чтобы поток способен поиск, который может быть верно для файлов, но не все потоки. Также обратите внимание на File.ReadAllText и File.ReadAllLines, если это то, что вы хотите сделать - они очень удобные методы утилиты.

1

Используйте Encoding.Unicode вместо этого.

Я думаю, вам нужно изменить OutputEncoding консоли, чтобы отобразить его правильно.

4

Если упрощена китайский обычно это gb2312 и для китайского это традиционная французская обычно Big5:

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

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

Самый полезный ответ! благодаря – CodeGuru 2013-03-04 08:50:49

0

Я просто столкнулся с той же проблемой, как ваша, и я решаю его сейчас. Я думаю, что главная проблема будет в редакторе txt. Когда вы сохраняете текст в формате .txt с помощью блокнота, вы можете выбрать кодировку внизу. Кодировка по умолчанию - ANSI, которая не поддерживает чтение китайского потока (зависит от вашего компьютера), в то время как Unicode работает для китайского текста. Я надеюсь, что это поможет :)

Приветствия,

Рональда