Convertierung von Win32 to Dos

05/10/2007 - 10:45 von Maurer Richard | Report spam
Hallo Ng,

Ich benötige in meinem Adresskonvertierprogramm einen Wahlknopf der mir
ein DosConvert vor das jeweilige Modul schaltet.

Das Problem ist, im bisherigen Programm in Visual Basic 6.0
funktionierte das mittels OemtoChar.
In C# hatte ich gedacht, dass das Encodinig macht.
Also ich lese einen Stream in einen String und dann mittels
Encoding.Ascii wieder in eine neue Datei.
Oder
Mittels sw.Encoding.Convert da habe ich auch ein Beispiel gefunden
das aber das selbe gemacht hat wie das direkte
Lesen und schreiben der Datensàtze.

[Snip]
void dosconvert()
{
// Win32 to Dos konvertieren
string file1 = "c:\\metro\\unijob.asc";
string file2 = "c:\\metro\eujob.asc";
string inputstr = "";
FileStream f2= new FileStream(file2, FileMode.Create);
StreamWriter s2 = new StreamWriter(f2,System.Text.Encoding.ASCII);
FileStream f1 = new FileStream(file1, FileMode.Open);
StreamReader s1 = new
StreamReader(f1,System.Text.Encoding.Default);
while((inputstr = s1.ReadLine()) != null)
{
s2.WriteLine(inputstr);
s2.AutoFlush=true;
}
s1.Close();
s2.Close();
}
[/Snip]

Diese Methode macht das zwar schön aber die Kodierung passt nicht.
Bei Sonderzeichen (umlauten) kommt immer Hex 3F = ? hm statt der
richtigen HexCodes.

Zur Erklàrung:
Quelle:
Win32. FC=ü; E4=à; C4=Ä; DF=ß usw.
Ziel:
ASCII: 81 = ü; 84=à; 8E=Ä;E1=ß usw. Das kommt auch in VisualBasic.

Wie kann man in C# die Umsetzung der Zeichen korrekt durchführen?

Bin um jede Information dankbar
Lg Richie

Wenn Du einen WÜRDIGEN siehtst, dann trachte ihm NACHZUEIFERN. Wenn Du einen UN-würdigen siehst, dann PRÜFE Dich in Deinem INNERN! (Konfuzius)
 

Lesen sie die antworten

#1 Günter Prossliner
05/10/2007 - 11:04 | Warnen spam
Hallo Richard!

Das Problem ist, im bisherigen Programm in Visual Basic 6.0
funktionierte das mittels OemtoChar.



Also die OEM Codepage.

In C# hatte ich gedacht, dass das Encodinig macht.
Also ich lese einen Stream in einen String und dann mittels
Encoding.Ascii wieder in eine neue Datei.



Achtung! ASCII ist US-ASCII, also 7-Bit. Das kennt keine Sonderzeichen o.à,
sondern nur die Codes 1-127.

Du musst ein entsprechendes ANSI Encoding verwenden, wobei Du die OEM
Codepage kennen musst. Am besten wàre es natürlich, wenn die zu verwendete
Codepage bekannt (spezifiziert / dokumentiert) ist. Wenn sich alle daran
halten, gibt es kein Problem im Austausch von Daten. Wenn Du Legacy-Systeme
ansprechen musst, ist die Codepage i.d.R. auch konstant (ggf. durch
Konfiguration verànderbar).

Um die (auf Deinem System, mit Deinen Einstellungen) aktuelle OEM Codepage
zu ermitteln kannst Du z.b. so vorgehen:

int oemCodePage = Thread.CurrentThread.CurrentCulture.TextInfo.OEMCodePage;
Encoding oemEncoding = Encoding.GetEncoding(oemCodePage);

dieses Encoding gibts Du dann für Deinen StreamWriter an.


Wenn sich Deiner Systemeinstellungen àndern, kann sich aber auch die OEM
Codepage àndern. Folglich ist es besser eine Codepage zu vereinbaren, bzw.
eben jene welche sich das andere System erwartet konstant zu setzten.



OK?
mfg GP

Ähnliche fragen