4 Stimmen

Wie liest man eine chinesische Textdatei mit C#?

Wie kann ich eine chinesische Textdatei mit C# lesen, kann mein aktueller Code nicht die richtigen Zeichen anzeigen:

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());
}

8voto

Jon Skeet Punkte 1325502

Sie müssen die richtige Kodierung für die Datei verwenden. Wissen Sie, welche Kodierung das ist? Es könnte UTF-16 sein, auch bekannt als Encoding.Unicode, oder möglicherweise etwas wie Big5. Sie sollten wirklich versuchen, das herauszufinden, anstatt nur zu raten.

Wie in der Antwort von leppie erwähnt, könnte das Problem auch in den Fähigkeiten der Konsole liegen. Um dies herauszufinden, geben Sie die Unicode-Zeichenwerte der Zeichenkette als Zahlen aus. Siehe mein Artikel zur Fehlersuche bei Unicode-Problemen für weitere Informationen und eine nützliche Methode zum Auslesen des Inhalts einer Zeichenkette.

Ich würde auch vermeiden, den Code zu verwenden, den Sie derzeit für das zeilenweise Lesen einer Datei verwenden. Verwenden Sie stattdessen etwas wie:

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

Der Aufruf von Peek() setzt voraus, dass der Stream in der Lage ist zu suchen, was bei Dateien der Fall sein kann, aber nicht bei allen Streams. Schauen Sie auch in File.ReadAllText y File.ReadAllLines wenn Sie das tun wollen - es sind sehr praktische Hilfsmethoden.

8voto

didier Punkte 791

Wenn es sich um vereinfachtes Chinesisch handelt, ist es normalerweise gb2312 und für das traditionelle Chinesisch ist es normalerweise Big5:

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

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

1voto

leppie Punkte 111830

Utilice Encoding.Unicode stattdessen.

Ich denke, Sie müssen die OutputEncoding der Konsole ändern, um sie korrekt anzuzeigen.

0voto

Ronald Huang Punkte 1

Ich bin gerade auf das gleiche Problem gestoßen wie Sie und habe es jetzt gelöst. Ich denke, das Hauptproblem liegt im txt-Editor. Wenn Sie Text im .txt-Format mit Notepad speichern, können Sie die Kodierung am unteren Rand auswählen. Die Standardkodierung ist ANSI, die das Lesen von chinesischen Streams nicht unterstützt (hängt von Ihrem Computer ab), während Unicode für chinesischen Text funktioniert. Ich hoffe, das hilft Ihnen weiter :)

Zum Wohl,

Ronald

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X