UTF-8 vers ASCII en utilisant la bibliothèque ICU

J’ai un std :: ssortingng avec des caractères UTF-8.
Je veux convertir la chaîne en son équivalent le plus proche avec des caractères ASCII.

Par exemple:

Łódź => Lodz
Assunção => Assuncao
Schloß => Schloss

Malheureusement, la bibliothèque d’ICU n’est vraiment pas intuitive et je n’ai pas trouvé de bonne documentation sur son utilisation, donc il me faudrait trop de temps pour apprendre à l’utiliser. Temps je n’ai pas.

Quelqu’un pourrait-il donner un petit exemple sur la façon dont cela peut être fait?
Merci.

Je ne sais pas pour ICU mais ICONV le fait et il est assez facile à apprendre. c’est seulement environ 3-4 appels et dans votre cas, vous avez besoin d’utiliser l’indicateur iconvctl() utilisant iconvctl() .

Essayez ceci, ucnv_convert (“US-ASCII”, “UTF-8”, targer, target-size, source, sourceize, pError)

J’ai écrit un rappel qui se décompose puis effectue une substitution. Il pourrait probablement être mis en œuvre comme une translittération. le code est ici decompcb.c et l’en-tête est à proximité. Installez-le comme suit sur un convertisseur Unicode-ASCII:

 ucnv_setFromUCallBack(gConverter, &UCNV_FROM_U_CALLBACK_DECOMPOSE, &status); 

puis utilisez gConverter pour convertir unicode en ASCII

Ce n’est pas un domaine dans lequel je suis un expert, mais si vous n’avez pas de bibliothèque qui le fait facilement pour vous, alors vous feriez peut-être mieux de créer une table de recherche / carte contenant le format UTF-8 -> Valeurs ASCII. c’est à dire. La clé est le caractère UTF-8, la valeur est la séquence de caractères ASCII.

La décomposition ß-> ss me dit que vous voulez la décomposition de compatibilité. En USI, vous avez besoin de la classe Normalizer pour cela. Ensuite, vous obtiendrez quelque chose comme L’odz ‘. À partir de cette chaîne, vous pouvez simplement supprimer les caractères non-ASCII. Pas besoin d’ICU, STL fera l’affaire.