Gibt es eine Funktion, um einen CString in einen DOS-String zu wandeln?
-
Moin!
Meine Anwendung muss mit einer alten DOS-Anwendung zusammenarbeiten.
Dazu schreibe ich eine Datei, die die andere Anwendung ausliest und in seine Anzeige übernimmt.Dummerweise gehen die Sonderzeichen dabei "kaputt".
Bärbel wird zu BΣrbel.Gibt es da eine fertige Konvertierungsfunktion oder muss ich was selber basteln?
-
Hallo,
probier es mal mit:
CString::AnsiToOem
bzw.
CString::OemToAnsi
Das sollte genau das machen, was du vorhast.
Andreas
-
Ich habe es selber konvertiert mit einem Konsolenprogramm.
Die Eingabedatei wird Zeichen für Zeichen ausgelesen und an eine
Funktion Ansi2Ascii(...) bzw. Ascii2Ansi(...) übergeben.
Darin sind alle vorkommenden Zeichen und die Entsprechung enthalten.
Der Wert (Ursprungswert oder konvertierter) wird dann Zeichen für Zeichen in eine Ausgabedatei zurückgeschrieben.Tester2
-
IBM-OEM ist doch nicht Ascii, oder ???
Tester2
-
Hallo Andro!
Danke für den Tip, ich hab natürlich erstmal das falsche ausprobiert...
AnsiToOem isses dann gewesen, aber leider macht das ausäöüÄÖÜß
blos
aeoeueAeOeUess
Ich lasse das erstmal so, aber die richtigen Buchstaben wären mir definitiv lieber.Das sind Kundendaten und die Zettel gehen zur Versicherung... ich fürchte die haben sich damit zickig.
-
Wir haben das Jahr 2006, glaube nicht, das jeman oe statt ö lesen will.
Schau mal hier, ob es dir weiter hilft:
http://www.codeproject.com/string/tconvert.asp
http://www.codeproject.com/string/CString2Char.asp
http://www.codeproject.com/string/bstrsproject1.asp
http://www.codeproject.com/string/cstringmgmt.aspirgendeines davon muß funktionieren!
-
Danke Artchi, besonders der letzte Link war wirklich interessant.
Nur zu Umlauten habe ich da nix gefunden.Ich tendiere stark zum Selberstricken...
-
PoC:
#include <windows.h> #include <iostream> using namespace std; int main() { WCHAR widebuffer[1000]; MultiByteToWideChar(CP_ACP, 0, "äöü", -1, widebuffer, 1000); char buffer[1000]; WideCharToMultiByte(852, 0, widebuffer, -1, buffer, 1000, 0, 0); cout << buffer; }
852 ist OEM Latin II, 850 tut's wohl auch.
-
Das hat genau das selbe Ergebnis wie AnsiToOem.
-
Bei mir gibt das äöü aus.
Was tut das bei dir?
cout << "\x84\x94\x81";