Sep 092009
 

Bei einer Anwendung werden Mitarbeiter via einer Datei importiert. Namen und Vornamen können durchaus Umlaute enthalten.

Ursprünglich wurden die Namen mit korrekten Umlauten exportiert. Irgend wann stellte der Exporteur aber das Encoding um. Danach waren die Umlaute nicht mehr richtig in der Exportdatei. Das sah wie folgt aus.

103129,Roland,Meier,Gnter H”ller

oder

"000000000  31 30 33 31 32 39 2C 52-6F 6C 61 6E 64 2C 4D 65   |103129,Roland,Me|"
"000000010  69 65 72 2C 47 81 6E 74-65 72 20 48 94 6C 6C 65   |ier,Gnter H”lle|"
"000000020  72                                                                         |r               |"

Jetzt wollte aber die Importroutine natürlich die Umlaute auch nicht mehr richtig importieren. Das führte unweigerlich zu Problemen.

using (StreamReader sr = new StreamReader(file, Encoding.Default))
{
	string row = sr.ReadLine();

	while (sr.Peek() >= 0)
	{
		row = sr.ReadLine();
		string[] fields = row.Split(',');

Mit diesem Code wurden die Umlaute nicht richtig importiert. Bei Encoding.XXX habe ich alle durchprobiert. UTF7, UTF8, UTF32, Default und alles Andere noch. Aber die Umlaute kamen noch immer falsch rein.

Irgend wie kam ich nicht auf die richtige Idee. Also fragte ich einfach mal bei CodeKicker.de nach. Nach kurzer Zeit hatte dort jemand die richtige Idee.

using (StreamReader sr = new StreamReader(file, Encoding.GetEncoding(437)))

Wenn der StreamReader mit diesem Encoding geöffnet wird klappt es wunderbar.

kick it on dotnet-kicks.de

  5 Responses to “ASCII Umlaute richtig konvertieren”

Comments (5)
  1. Welcher arme Azubi musste Encoding 1 bis 436 durchprobieren? ist 437 was spezielles?!

  2. Ein geduldiger.

  3. Codepage 437 (CP437) ist auch bekannt als "DOS-US" oder "OEM-US" und wurde wie der Name schon vermuten lässt vom guten alten DOS verwendet. 🙂

    Gehört auch zu den Standart-Encodings, die ich bei Umlautproblemen erst mal durchprobiere.

    Gruß,
    Gordon

    PS-Trivia:
    CP437 hat zwar Entsprechungen für die deutschen Umlaute ä, ö und ü aber für die SZ-Ligatur (ß) gibt es kein eigenes Zeichen sondern es wird dafür der Kleinbuchstabe Beta aus dem griechischen Alphabet verwendet (ß) 😉

  4. [quote]…Namen und Vornamen können…[/quote]
    Das Umlautproblem kann in dem Zusammenhang einer gewissen Komik nicht entbehren 😉

  5. Da habe ich jetzt aber lange gesucht bis ich den verstanden habe. 😀

Sorry, the comment form is closed at this time.