Frage

Das Bild unten erklärt alle:

alt text http://img133.imageshack.us/img133/4206/accentar9 .png

Die Variable aus File.ReadAllText(path); textinput kommt und Zeichen wie: 'é è ... nicht angezeigt. Als ich meine Unittest laufen, ist alles in Ordnung! Ich sehe sie ... Warum?

War es hilfreich?

Lösung 3

Ich weiß nicht, warum es mit NUnit funktioniert, aber ich öffnen Sie die Datei mit Notepad ++ und ich sehe ANSI im Format. Nun konvertierte ich auf UTF-8 und es funktioniert.

Ich frage mich immer noch, warum es mit NUnit und nicht in der Konsole zu arbeiten? aber zumindest funktioniert es jetzt.

Aktualisieren Ich verstehe nicht, warum ich nach unten auf der Frage abgestimmt bekommen und in dieser Antwort, weil die Frage nach wie vor gut ist, warum in einer Konsole ich nicht eine ANSI-Datei lesen kann, aber in nUnit ich kann?

Andere Tipps

Die .NET-Klassen (System.IO.StreamReader und Ähnliches) nehmen UTF-8 als Standardcodierung. Wenn Sie eine andere Codierung lesen möchten, müssen Sie dies an den entsprechenden Konstruktor Überlastung explizit zu übergeben.

Beachten Sie auch, dass es nicht eine einzige Codierung „ANSI“ bezeichnet. Sie beziehen sich wahrscheinlich auf die Windows-Codepage 1252 auch bekannt als „Westeuropa“. Beachten Sie, dass dies unterscheidet sich von der Windows-Standardcodierung in anderen Ländern. Dies ist relevant, wenn Sie versuchen, System.Text.Encoding.Default zu verwenden, da dies tatsächlich von System zu System unterschiedlich ist.

/ EDIT: Es scheint, dass Sie falsch verstanden beide meine Antwort und meinen Kommentar:

  1. Das Problem in Ihrem Code ist, dass Sie .NET sagen, welche Codierung Sie verwenden.
  2. Die andere Bemerkung und sagt, dass „ANSI“ beziehen andere Kodierungen, hat nichts mit dem Problem zu tun. Es war nur eine „übrigens“ Bemerkung Missverständnisse zu vermeiden (na ja, dass man nach hinten los).

So, endlich: Die Lösung für Ihr Problem soll der folgende Code sein:

string text = System.IO.File.ReadAllText("path", Encoding.GetEncoding(1252));

Der wichtige Teil ist hier die Verwendung einer geeigneten System.Text.Encoding Instanz.

Dies setzt allerdings voraus, dass Ihre Codierung ist in der Tat von Windows-1252 (aber ich glaube, das ist, was Notepad ++ bedeutet durch „ANSI“). Ich habe keine Ahnung, warum Ihr Text korrekt angezeigt wird, wenn von NUnit lesen. Ich nehme an, dass NUnit entweder eine Art automatische Erkennung für Textcodierungen hat oder dass NUnit verwendet einige seltsame Standardwerte (das heißt nicht UTF-8).

Oh, und übrigens: „ANSI“ wirklich bezieht sich auf das „American National Standards Institute“. Es gibt eine Menge von völlig unterschiedlichen Standards, die „ANSI“ als Teil ihrer Namen haben. Zum Beispiel, C ++ ist (unter anderem) auch einen ANSI-Standard.

Nur in manchen Kontexten ist es (unpräzise) verwendet, um die Windows-Kodierungen zu verweisen. Aber auch dort, wie ich zu erklären, habe versucht zu, es bezieht sich in der Regel nicht zu einer spezifische Codierung, sondern zu einer Klasse von Kodierungen, die als Standardwerte für verschiedene Länder Windows verwendet. Eine davon ist die Windows-1252.

Versuchen Sie, Ihre Konsole sessin der Ausgangscodepage Einstellung mit dem chcp Befehl. Der Codepages von Windows unterstützt wird hier , hier und hier . Denken Sie daran, fundametnaly die Konsole ist ziemlich einfach: es Zeichen UNCICODE oder DBCS zeigt durch eine Codepage mit der Glyphe dtermine, die angezeigt wird.

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