Kodierungsproblem

11/09/2014 - 14:15 von Gregor Szaktilla | Report spam
Hallo allerseits!

Ich habe einen Container map<char,string>, den ich mit
Zeichen-/Buchstaben-/Glyphen-Bitmaps fülle:

charMap['0']="..***...*...*..*...*..*.*.*..*...*..*...*...***";

Das geht gut, solange ich im Bereich von „Standard-ASCII“ bleibe. Wenn
ich zum Beispiel das Ä definieren möchte, meckert der Compiler. Der
einzige mir bislang bekannte Ausweg ist, den Container von

map<char,string>

zu

map<string,string>

zu àndern und ein paar Zeilen Code umzustricken. Gibt es
andere/hübschere Möglichkeiten, dieses Kodierungsproblem zu hàndeln?

TIA+Gruß

Gregor
 

Lesen sie die antworten

#1 Thomas Dorner
11/09/2014 - 16:13 | Warnen spam
Hallo Gregor!

Gibt es andere/hübschere Möglichkeiten, dieses Kodierungsproblem zu hàndeln?



Ich kann ein Problem nachvollziehen (1), wenn ich meine C++ Source als
UTF-8 Datei abspeichere, aber folgendes funktioniert hier mit G++ 4.8.2,
wenn ich die Datei in ISO Latin-1 codiere:

std::map<unsigned char, int> test2;
test2['0'] = 0x30;
test2['Ä'] = 0xC4;
std::cout << test2['0'] << ',' << test2['Ä'] << "";

Das erscheint mir auch logisch, schließlich paßt ein UTF-8 Umlaut nicht
in 1 Byte. Je nach Codierung hilft hier eventuell ein wchar (oder ein
Trigraph - just kidding ;-).

(1)
MapTest.cpp:48:11: warning: multi-character character constant [-Wmultichar]
test2['Ä'] = 38;
^
MapTest.cpp:49:45: warning: multi-character character constant [-Wmultichar]
std::cout << test2['0'] << ',' << test2['Ä'] << "";
^
MapTest.cpp: In function ‘int main()’:
MapTest.cpp:48:15: warning: large integer implicitly truncated to unsigned type [-Woverflow]
test2['Ä'] = 38;
^
MapTest.cpp:49:49: warning: large integer implicitly truncated to unsigned type [-Woverflow]
std::cout << test2['0'] << ',' << test2['Ä'] << "";

Viele Grüße, Thomas

Ähnliche fragen