Frage

Ich bin ein TFS Checkin Politik zu schreiben, der prüft, ob unsere Quelldateien unserer Datei-Header enthalten.

Mein Problem ist, dass unsere Datei-Header ein Sonderzeichen „©“ enthält und leider einige unserer Quelldateien werden in ANSI codiert. Also, wenn ich diese Dateien in der Politik zu lesen, sehen die Zeichenfolge wie dieses „Copyright 2009“.

string content = File.ReadAllText(pendingChange.LocalItem);

ich müde die Codierung der Zeichenfolge zu ändern, aber es hilft nicht. Also, wie kann ich diese Dateien lesen, dass ich die richtige Zeichenfolge „Copyright © 2009“ erhalten?

Vielen Dank für die Hilfe!

Viele Grüße Eny

War es hilfreich?

Lösung

Verwenden Encoding.Default:

string content = File.ReadAllText(pendingChange.LocalItem, Encoding.Default);

Sie sollten sich bewusst sein, aber, dass das liest sie das System Standard-Kodierung verwenden - das ist nicht die gleiche wie die Codierung der Datei sein kann. Es gibt keine einzige Codierung genannt ANSI, aber in der Regel , wenn die Leute über „die ANSI-Codierung“ sprechen, meinen sie Windows-Codepage 1252 oder was auch immer ihre Box zu verwenden, geschieht.

Ihr Code wird robuster sein, wenn Sie das herausfinden können, genau Codierung verwendet.

Andere Tipps

Es scheint sinnvoll, wenn Sie eine solche Politik haben, dass Sie auch Team vereinbarten Standard-Codierung haben. Um ehrlich zu sein, ich kann nicht sehen, warum jedes Team eine Codierung andere als „Unicode (UTF-8 mit Unterschrift) - Codepage 65001“ verwenden würde (außer vielleicht für ASPX-Seiten mit erheblichen nicht-lateinischem statischem Inhalt aber selbst dann kann ich‘ t, wie es wäre eine große Sache zu verwenden UTF-8).

Sie noch gemischte Codierungen dann zulassen möchten Unter der Annahme, müssen Sie als nächstes eine Art und Weise, die eine Datei speichern war codiert, um zu bestimmen, so wissen Sie, welche Codierung ReadAllText passieren. Es ist nicht einfach, diese aus der Datei jedoch bestimmen Encoding.Default mit wahrscheinlich ok arbeiten. Seit seinem höchstwahrscheinlich Sie nur 2 Kodierungen zu tun haben, der VS (UTF-8 mit Signatur) und einer von Ihnen Maschinen verwendete ANSI-Codierung (wahrscheinlich von Windows-1252).

Daher mit

 string content = File.ReadAllText(pendingChange.LocalItem, Encoding.Default);

funktioniert. (Wie ich sehe, Jon bereits gebucht). Dies funktioniert, weil, wenn die UTF-8 BOM (das ist, was VS bedeutet der Begriff „Signatur“) am Anfang der Datei vorhanden ist, die gelieferten Kodierungsparameter ignoriert und UTF-8 sowieso verwendet wird. Daher, wo die Datei gespeichert wird UTF-8 verwenden Sie die richtigen Ergebnisse zu erhalten und wo ANSI verwendet wird, sind Sie höchstwahrscheinlich auch korrekte Ergebnisse zu erhalten.

BTW, wenn Sie die Datei-Header verarbeiten würde ReadAllLines die Sache nicht einfacher machen?.

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