Frage

Ich bin mit der Klasse Stream in .NET wie folgt:

using( StreamReader reader = new StreamReader( "c:\somefile.html", true ) {
    string filetext = reader.ReadToEnd();
}

Dies funktioniert gut, wenn die Datei eine BOM hat. Ich lief in Schwierigkeiten mit einer Datei ohne BOM .. im Grunde habe ich Kauderwelsch. Als ich Encoding.Unicode angegebenen es funktionierte gut, zum Beispiel:

using( StreamReader reader = new StreamReader( "c:\somefile.html", Encoding.Unicode, false ) {
    string filetext = reader.ReadToEnd();
}

Also, ich brauche den Inhalt der Datei in einen String zu erhalten. So wie dies gehen Menschen in der Regel? Ich weiß, es gibt keine Lösung, die 100% der Zeit arbeiten, aber ich mag meine Chancen verbessern .. gibt es offenbar Software gibt, die zu erraten versucht (zB Notepad, Browser, etc.). Gibt es eine Methode in dem .NET-Framework, die für mich erraten? Hat jemand einen Code haben sie teilen möchten?

Mehr Hintergrund: Das Frage ist so ziemlich das gleiche wie meine, aber ich bin in .NET Land. Diese Frage führte mich zu einem Blog-Eintrag verschiedene Codierungserkennung Bibliotheken , aber keine sind in .NET

Andere Tipps

Sie sollten diesen Artikel von Raymond Chen lesen. Er geht ins Detail, wie Programme können erraten, was eine Codierung ist (und einige der Spaß, die aus Erraten kommt)

http://blogs.msdn.com/oldnewthing /archive/2004/03/24/95235.aspx

Ich hatte viel Glück mit Pude , einem C# Hafen von Mozilla Universal Charset Detector.

UTF-8 ist in einer Weise, dass es unwahrscheinlich ist, einen Text in einer beliebigen 8Bit-Kodierung wie latin1 decodiert wird, um eine ordnungsgemäße Unicode kodiert haben UTF-8 verwendet wird.

So der minimale Ansatz, dies ist (Pseudo-Code, ich .NET nicht sprechen):

Versuch:    u = some_text.decode ( "UTF-8") außer UnicodeDecodeError:    u = some_text.decode ( "most-wahrscheinlich-Codierung")

Für den am meisten wahrscheinlich kodierende man in der Regel verwendet, z.B. latin1 oder cp1252 oder was auch immer. Ausgefeiltere Ansätze könnten versuchen und sprachspezifischen Zeichen Paarungen, aber ich bin mir nicht bewusst etwas finden, das als Bibliothek oder so tut das.

Ich habe diese etwas ähnliches eine Weile zurück zu tun:

http://www.conceptdevelopment.net/Localization/NCharDet/

Mit Win32 des IsTextUnicode.

Im allgemeinen Sinne ist es eine schwierige promlem. Siehe: http://blogs.msdn.com/oldnewthing/ Archiv / 2007/04/17 / 2158334.aspx .

Eine Hacky Technik könnte sein, eine MD5 des Textes zu nehmen, entschlüsseln Sie dann den Text und neu kodieren sie in verschiedenen Codierungen, jede MD5'ing. Wenn man Spiele erraten Sie es, dass die Kodierung.

Das ist offensichtlich zu langsam für etwas, das eine Menge von Dateien verarbeitet, aber für so etwas wie ein Texteditor ich sehen konnte, daran zu arbeiten.

Other than that, es Hände schmutzig sein, die Java-Bibliotheken von

Sehen Sie meine (letzte) Antwort auf diese Frage (soweit ich das beurteilen kann, äquivalent) Frage: Wie kann ich die Codierung / codepage einer Textdatei

Es versucht nicht, über eine Reihe von möglichen „nationalen“ Kodierungen wie MLang und NCharDet tun, um zu erraten, sondern vorausgesetzt, dass Sie wissen, welche Art von Nicht-Unicode-Dateien, die Sie wahrscheinlich zu begegnen. Soweit ich aus Ihrer Frage sagen kann, sollte es Ihr Problem ziemlich zuverlässig Adresse (ohne auf dem „Black Box“ von MLang zu verlassen).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top