Как я могу прочитать китайский текстовый файл с помощью 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());
}





Вместо этого используйте Encoding.Unicode.
Я думаю, вам нужно изменить OutputEncoding консоли, чтобы она отображалась правильно.
Вам необходимо использовать правильную кодировку для файла. Вы знаете, что это за кодировка? Это может быть UTF-16, он же Encoding.Unicode или, возможно, что-то вроде Big5. На самом деле вам следует попытаться выяснить наверняка, а не гадать.
Как упоминалось в ответе leppie, проблема также может заключаться в возможностях консоли. Чтобы узнать наверняка, выгрузите значения символов Unicode строки в виде чисел. См. Мой статья об отладке проблем с юникодом для получения дополнительной информации и полезного метода сброса содержимого строки.
Я бы также не стал использовать код, который вы сейчас используете для чтения файла построчно. Вместо этого используйте что-то вроде:
using (StreamReader sr = new StreamReader(path, appropriateEncoding))
{
string line;
while ( (line = sr.ReadLine()) != null)
{
// ...
}
}
Вызов Peek () требует, чтобы поток имел возможность поиска, что может быть верно для файлов, но не для всех потоков. Также посмотрите File.ReadAllText и File.ReadAllLines, если это то, что вы хотите сделать - это очень удобные служебные методы.
Если это упрощенный китайский, обычно это gb2312, а для традиционного китайского - обычно Big5:
// gb2312 (codepage 936) :
System.Text.Encoding.GetEncoding(936)
// Big5 (codepage 950) :
System.Text.Encoding.GetEncoding(950)Я только что столкнулся с той же проблемой, что и ваша, и решаю ее сейчас. Думаю, основная проблема будет в редакторе txt. Когда вы сохраняете текст в формате .txt с помощью блокнота, вы можете выбрать кодировку внизу. Кодировка по умолчанию - ANSI, которая не поддерживает чтение потока на китайском языке (зависит от вашего компьютера), в то время как Unicode работает для китайского текста. Я надеюсь, что это поможет вам :)
Ваше здоровье,
Рональд
Самый полезный ответ! Спасибо