Ascii-code von Umlauten nicht korrekt

cesupa

Erfahrenes Mitglied
Hallo,

hab mir vor kurzem im Kunstunterricht einen Algorithmus zur Base64-Kodierung erarbeitet (war halt langweilig...^^). Soweit funktioniert der auch ganz gut, nur bei Umlauten wie z.B. ü gibts Probleme, da er scheinbar mein unsigned char nicht so recht akzeptieren will:

Code:
void decode(unsigned char in[3],unsigned char out[4],int len)
{
    char buf[256];
    unsigned char i='ü';
    
    cout<<endl<<endl<<"Converting: "<<(unsigned char)(in[0])<<in[1]<<in[2]<<endl<<endl;
    
   cout<<(unsigned int)((unsigned char)in[0])<<endl;
    itoa((unsigned char)(in[0]),buf,2);
    cout<<buf<<endl;

//Kodierung...

}

In in[0] steht das ü. Wenn ich das Programm starte und das ü mit cin.get() einlese und meiner kodierfunktion übergebe, wird mir als ascii-code 129 statt 252 geliefert, dementsprechend wird dann auch die kodierung falsch. Wenn ich jetzt aber den ascii-code der Variable i ausgeben lasse, kommt das richtige Ergebnis. Wisst ihr vielleicht woran das liegen könnte?

Gruß
cesupa
 
Moin,

klar, weil es keine ASCII- sondern ANSI-Zeichen sind :p
Du brauchst entsprechende Konvertierungsfunktionen, die Du für jedes Zeichen aufrufst:

Code:
// %Funktion: Wandelt ein ASCII-Zeichen in entsprechendes ANSI-Zeichen um
// %Übergabe: ansi = ASCII-Wert
// %Rückgabe: Funktionswert : ANSI-Wert des Zeichens
char ascii2ansi(char ascii)
{
    switch (ascii)
    {
    case char(132): return char(228);                    // ä
    case char(148): return char(246);                    // ö
    case char(129): return char(252);                    // ü
    case char(142): return char(196);                    // Ä
    case char(153): return char(214);                    // Ö
    case char(154): return char(220);                    // Ü
    case char(225): return char(223);                    // ß
    default: return ascii;
    }
}


// %Funktion: Wandelt ein ANSI-Zeichen in entsprechendes ASCII-Zeichen um
// %Übergabe: ansi = ANSI-Wert
// %Rückgabe: Funktionswert : ASCII-Wert des Zeichens
char ansi2ascii(char ansi)
{
    switch (ansi)
    {
    case char(228): return char(132);                    // ä
    case char(246): return char(148);                    // ö
    case char(252): return char(129);                    // ü
    case char(196): return char(142);                    // Ä
    case char(214): return char(153);                    // Ö
    case char(220): return char(154);                    // Ü
    case char(223): return char(225);                    // ß
    default: return ansi;
    }
}

Gruß
Klaus
 
Moin,

das ist abhängig von der eingestellte Codepage im Betriebssystems und der jeweiligen Anwendung!

Die Zeichen 32 - 127 sind in ANSI und ASCII identisch! Für die Zeichen 128 - 255 gibt es verschiedene Codepages - eben abhängig von der Konfiguration des BS und der Anwendung (u. a. der eingestellten Sprache)!

Gruß
Klaus
 

Neue Beiträge

Zurück