Default Encoding ändern

03/04/2008 - 03:58 von Lutz Elßner | Report spam
FindInFiles sucht in Dateien nach einem String und liest die Dateien im Default Encoding (Ansi).

Weil ich kein Encoding angeben kann, denke ich, dass ich das Default Encoding des Threads àndern muss.
Wie geht das?
In der app.config würde schon reichen.

Zusatzfrage:
Könnte .NET das Encoding einer Text Datei auch selbst ermitteln? Also "BOM" auswerten?
Notepad macht das ja auch alleine.
Und wie?

Lutz
 

Lesen sie die antworten

#1 Elmar Boye
03/04/2008 - 09:57 | Warnen spam
Hallo Lutz,

Lutz Elßner schrieb:
FindInFiles sucht in Dateien nach einem String und liest die Dateien
im Default Encoding (Ansi).



Da wirst Du kein Glück haben, das ist intern verdrahtet.
Wobei intern schon eine Erkennung anhand eines BOM gemacht
wird. Nur wenn die nicht gefunden wird (durch einen StremReader),
wird mit Encoding.Default gearbeitet - sagt mir der Reflector ;-)

Weil ich kein Encoding angeben kann, denke ich, dass ich das Default
Encoding des Threads àndern muss.



Das ist ausschließlich eine Sache von (Text)Dateien.
Threads haben kein Encoding, da das Betriebssystem immer eine
einheitliche Codierung verwendet. Und .NET durchgàngig Unicode.

Zusatzfrage: Könnte .NET das Encoding einer Text Datei auch selbst ermitteln?
Also "BOM" auswerten? Notepad macht das ja auch alleine. Und wie?



Die StreamReader Klasse kann das (und wird hilfsweise dazu auch genutzt).

Aber eine BOM existiert nur bei Unicode und ist dort ebenfalls optional.
Siehe auch: <URL:http://unicode.org/faq/utf_bom.html>
Unicode als UTF-16 Codierung kann man beim Fehlen ggf. anhand der gehàuft
auftretenden Null-Bytes erkennen (solange man im westlichen Sprachraum bleibt)
und ggf. daraus auf Little/Big Endian schließen.
Bei UTF-8 ist das schon schwieriger, da dazu erst einmal Zeichen > 127
auftreten müssen.

Für die diversen 8 Bit "Textformate", mit ihrer Vielzahl von Codepages
- Ansi (Windows oder ISO) bzw. OEM -, gibt es keine Kennzeichnung.
Deswegen muß man da vorher wissen, wie die Datei codiert ist.
Siehe auch: <URL:http://www.iana.org/assignments/character-sets>
(wobei nur eine Handvoll davon praktisch auftreten werden)

Gruß Elmar

Ähnliche fragen