Was ist der empfohlene Weg, um einige Benutzereingaben zu lesen, die Sonderzeichen mit beispielsweise haben kann, Akzent, wenn es nicht bekannt, bei welcher locale
es eingegeben wird.Wie sicher und portabel Eingang und prüft für die Akzentzeichen
Wie sicher einen Charakter dieses Benutzereingabe vergleichen, wenn sie eine besondere ist, dass ich eine Art und Weise zu handhaben müssen?
Dies ist ein Beispielcode, die Absicht zu verdeutlichen:
#include <iostream>
using namespace std;
int main() {
char txt[10];
cin.getline(txt, sizeof(txt));
if(txt[0] == 'á')
cout << "Special character found\n";
}
Das Problem ist:
warning: multi-character character constant [-Wmultichar]
if(txt[0] == 'á')
^
Wenn ich L'á'
so breit Zeichenliteral verwenden, dann wird es nicht passen, da der Eingang ist nicht breit.
Wenn ich auch wchar_t
und wcin.getline
benutze, um Benutzereingaben in Wide-Zeichen zu erhalten, dann kann es bei einigen Systemen funktionieren und bei anderen nicht, abhängig von der Umgebung und den Ländereinstellungen.
Wie sicher und portabel über dieses Problem zu bekommen? Vielen Dank!
Vielleicht möchten Sie mit einer Unicode-Bibliothek wie [ICU] (http://site.icu-project.org/) – NathanOliver
der beste Ansatz, oder unser Favorit betrachten ? Ich bin gut mit UTF8 intern gegangen, in Windows muss ich für UI-Anzeige und Eingabe in UTF-16 konvertieren, aber es lohnt sich. Ich habe ausschließlich 'boost :: locale :: conv :: utf_to_utf' verwendet, um die Conversions durchzuführen. –