Comment faire pour convertir en UTF-8 std::string en UTF-16 std::wstring?
Si j'ai un UTF-8 std::string
comment puis-je le convertir en UTF-16 std::wstring
? En fait, je veux comparer deux mots persans.
Voir stackoverflow.com/questions/148403/... parmi les autres.
double possible de comment puis-je comparer chaîne utf8 comme les mots persans en c++? ou ceci.
double possible de comment puis-je comparer chaîne utf8 comme les mots persans en c++? ou ceci.
OriginalL'auteur aliakbarian | 2011-08-22
Vous devez vous connecter pour publier un commentaire.
Voici un peu de code. Seulement un peu testé et il y a probablement quelques améliorations. Appelez cette fonction pour convertir une chaîne UTF-8 pour UTF-16 wstring. Si il pense que la chaîne d'entrée n'est pas de l'UTF-8, puis il va lever une exception, sinon elle renvoie l'équivalent de l'UTF-16 wstring.
Vraiment content que cela a aidé. Il est vraiment juste une question de poser la bonne question. Il y a beaucoup de connaissance sur ce forum, mais les débutants ne peuvent souvent pas accès à cette connaissance, car ils ne savent pas quoi demander.
merci encore une fois! 🙂
En fait, j'ai juste repéré un petit bug dans mon code, vous devriez probablement de le copier à nouveau. J'ai changé cette
if (j == utf8.size())
à ceif (i == utf8.size())
.wow, donc beaucoup d'avertissements et d'erreurs.
OriginalL'auteur
C'est comment vous le faites avec C++11:
Et ce sont les en-têtes dont vous avez besoin:
Un exemple plus complet disponible ici:
http://en.cppreference.com/w/cpp/locale/wstring_convert/from_bytes
wchar_t
n'est pas un type 16 bits sur les systèmes d'exploitation autres que Windows. Vous avez besoin d'utiliserchar16_t
à la place.merci! J'ai mis à jour la réponse à utiliser
char16_t
à la place.Ne fonctionne pas avec g++ 6.2 ou clang++ 3.8 sur lubuntu 16.04
OriginalL'auteur
Il y a quelques Q&Un ici et ici qui est intéressant à lire.
Fondamentalement, vous avez besoin de convertir la chaîne de caractères dans un format commun -- ma préférence va toujours à convertir en UTF-8, mais votre kilométrage peut méfier.
Il y a beaucoup de logiciels écrits pour faire la conversion, la conversion est en ligne droite vers l'avant et peut être écrit en quelques heures-mais pourquoi ne pas ramasser quelque chose de déjà fait, comme l'UTF-8 RPC
OriginalL'auteur
Cette page semble également utile: http://www.codeproject.com/KB/string/UtfConverter.aspx
Dans la section commentaire de cette page, il ya aussi quelques suggestions intéressantes pour cette tâche comme:
Ou
Si je ne suis pas sûr de la validité de ces approches...
OriginalL'auteur