Quelle est la manière recommandée de lire une entrée utilisateur qui peut avoir des caractères spéciaux avec, par exemple, des accents, si on ne sait pas dans quel locale
il est entré.Comment entrer et vérifier en toute sécurité et de manière portative les caractères d'accent
Comment comparer en toute sécurité un caractère de cette entrée d'utilisateur s'il s'agit d'une entrée spéciale dont j'ai besoin?
C'est un exemple de code pour illustrer l'intention:
#include <iostream>
using namespace std;
int main() {
char txt[10];
cin.getline(txt, sizeof(txt));
if(txt[0] == 'á')
cout << "Special character found\n";
}
Le problème est:
warning: multi-character character constant [-Wmultichar]
if(txt[0] == 'á')
^
Si j'utilise L'á'
aussi large caractère littéral, il ne correspond pas à, depuis l'entrée n'est pas large. Si j'utilise wchar_t
et wcin.getline
pour que l'utilisateur saisisse des caractères larges, cela peut fonctionner sur certains systèmes et pas sur d'autres, selon l'environnement et les paramètres régionaux.
Comment surmonter ce problème en toute sécurité et en toute sécurité? Merci!
Vous voudrez peut-être envisager d'utiliser une bibliothèque unicode comme [ICU] (http://site.icu-project.org/) – NathanOliver
La meilleure approche, ou notre préféré ? Je me suis bien débrouillé en utilisant UTF8 en interne, dans Windows, je dois convertir en UTF-16 pour l'affichage et l'entrée de l'interface utilisateur, mais ça vaut le coup. J'ai utilisé exclusivement 'boost :: locale :: conv :: utf_to_utf' pour faire les conversions. –