Entwickler-Ecke
IO, XML und Registry - Zeichencodierung einer Textdatei
Florian Wolf - Do 16.09.10 17:25
Titel: Zeichencodierung einer Textdatei
Hallo,
ich muss für eine vorhandene Software eine Importdatei erzeugen.
Diese Software kann eine ä, ö und ü einlesen. Für das ü benötige ich z.b. das Zeichen 129 in der ASCII-Tabelle.
Ich schaffe es aber nicht dieses Zeichen in eine TextTatei zu schreiben.
Ich glaube es liegt an der Unicode Zeichencodierung, dass wenn ich in einen String das Zeichen 129 einfüge [über Stringvariable + Convert.ToChar(129)] ich immer an der stelle in meiner Textdatei zwei Zeichen habe [Zeichen 194 und Zeichen 129].
Gibt es eine Möglichkeit dass ich nur das Zeichen 129 schreiben kann?
Ich habe es auch schon versucht als Bytearray zu speichern, aber dann stand gar nichts mehr in meiner Datei.
Meine Datei lege ich wie folgt an:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| string strSchreiber; string strDateiname;
strDateiname = Application.StartupPath + "\\ItemStructure.txt"; StreamWriter objWriter = new StreamWriter(strDateiname, true); strSchreiber = "Los-f" + Convert.ToChar(129) + "r-Los"; objWriter.WriteLine(strSchreiber); |
Moderiert von
Christian S.: Topic aus C# - Die Sprache verschoben am Do 16.09.2010 um 17:29
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
Trashkid2000 - Do 16.09.10 18:30
Hi,
ja, Zeichensätze bei Textdateien ist immer ein spannendes Thema :)
Florian Wolf hat folgendes geschrieben : |
Für das ü benötige ich z.b. das Zeichen 129 in der ASCII-Tabelle |
Stellt sich erst einmal die Frage, wie Du (oder aber die Software, für die Du die Importdateien schreiben sollst) auf den dezimalen Wert von 129 für das Zeichen "ü" kommt. Denn die normale, alte ASCII- Zeichentabelle geht nur bis 127 8)
Ganze 128 Zeichen. Alles, was darüber hinaus läuft, ist ANSI, UTF8, UTF16...
Und selbst bei der ANSI-Tabelle ist das Zeichen auf 129 ein "�". Und eigentlich wäre es ja für ANSI die 252.
Hast Du denn als Vorlage eine originale Importdatei?
Marko
Florian Wolf - Fr 17.09.10 08:36
Trashkid2000 hat folgendes geschrieben : |
Hi,
Stellt sich erst einmal die Frage, wie Du (oder aber die Software, für die Du die Importdateien schreiben sollst) auf den dezimalen Wert von 129 für das Zeichen "ü" kommt.
|
Ja, diese Frage habe ich mir auch gestellt und kann das nicht beantworten.
Trashkid2000 hat folgendes geschrieben : |
Denn die normale, alte ASCII- Zeichentabelle geht nur bis 127 8)
Ganze 128 Zeichen. Alles, was darüber hinaus läuft, ist ANSI, UTF8, UTF16...
Und selbst bei der ANSI-Tabelle ist das Zeichen auf 129 ein "�". Und eigentlich wäre es ja für ANSI die 252.
Hast Du denn als Vorlage eine originale Importdatei?
Marko |
Ich habe eine Exportdatei. Dort wo in der Software ein ü steht ist in der Exportdatei ein "�" (Zeichen 129).
Das klingt so, als ob mich das meinem Zeit näher bringen könnte. Leider vertstehe ich das nicht so ganz wie ich das umsetzen muss. Hättest du ein kleinen Stück Quellcode. Da wäre ich sehr dankbar.
Yogu - Fr 17.09.10 12:55
Ist gar nicht so schwer, wie es klingt ;)
C#-Quelltext
1:
| byte[] data = new Encoding(28591).GetBytes("Bloß ein blöder Test mit Umlauten"); |
In
data ist dann ein Array mit Bytes, die du in die Datei schreiben musst, z.B. mit
FileStream.
Noch einfacher geht's mit dem
StreamWriter:
C#-Quelltext
1: 2: 3:
| using (StreamWriter writer = new StreamWriter(fileName, true, new Encoding(28591))) { writer.writeLine("Bloß ein blöder Test mit Umlauten"); } |
Grüße,
Yogu
Trashkid2000 - Fr 17.09.10 15:50
Yogu hat folgendes geschrieben : |
C#-Quelltext 1:
| byte[] data = new Encoding(28591).GetBytes("Bloß ein blöder Test mit Umlauten"); |
|
Kurze Anmerkung: Encoding ist eine abstrakte Klasse und kann nicht instanziiert werden.
Es müsste dann also
C#-Quelltext
1:
| byte[] data = Encoding.GetEncoding(28591).GetBytes("Bloß ein blöder Test mit Umlauten"); |
heißen.
Marko
Yogu - Fr 17.09.10 19:46
Trashkid2000 hat folgendes geschrieben : |
Kurze Anmerkung: Encoding ist eine abstrakte Klasse und kann nicht instanziiert werden. |
Oh mist, ich hab nur nach den Konstruktoren gesucht und gesehen, dass einer mit einem
int-Parameter existiert. Dass dieser
protected ist, hab ich übersehen :oops:
Florian Wolf - Mo 20.09.10 09:12
Danke Yogu und Trashkid2000.
Über
Quelltext
1:
| StreamWriter writer = new StreamWriter(fileName, true, new Encoding.GetEncoding(28591)); |
konnte ich mein Problem lösen.
Die Hilfe von Visual Studio hat mich dann mit eurer Hilfe zusammen soweit gebracht, dass ich gleich die Codepage 437 benutzt habe, denn darin ist das ü an der Stelle 129 und somit kann ich die Datei für den Import komplett korrekt codieren.
Vielen Dank ihr habt mir sehr geholfen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!