Comment convertir (pas nécessairement par programme) entre les commandes wchar_t de Windows et GCC / Linux?

StackOverflow https://stackoverflow.com/questions/236125

  •  04-07-2019
  •  | 
  •  

Question

Supposons que j'ai cette chaîne Windows wchar_t:

L"\x4f60\x597d"

et

L"\x00e4\x00a0\x597d"

et voudrait le convertir (pas nécessairement par programme; ce sera une opération ponctuelle) au format wchar_t de GCC / Linux, format UTF-32 autant que je sache. Comment fait-on ça? (une explication générale serait utile, mais un exemple basé sur ce cas concret serait également utile)

S'il vous plaît ne me dirigez pas vers des sites de conversion de personnage. Je voudrais convertir L " \ x (quelque chose) " forme et non pas "caractère de fin" formulaire.

Était-ce utile?

La solution

L'une des bibliothèques les plus utilisées pour la conversion de caractères est la bibliothèque ICU http://icu-project.org/ C'est par exemple utilisé par certaines bibliothèques http://www.boost.org/ .

Autres conseils

Convertirait du format UTF-16 (formulaire Visual C ++ wchar_t ) au format UTF-8, puis éventuellement du format UTF-8 au format UCS-4 (formulaire GCC wchar_t ), être une réponse acceptable?

Si tel est le cas, vous pouvez utiliser Windows avec la fonction WideCharToMultiByte (avec CP_UTF8 pour le paramètre CodePage ), pour la première partie de La conversion. Ensuite, vous pouvez coller les chaînes UTF-8 résultantes directement dans votre programme ou les convertir davantage. Voici un message indiquant comment une personne l'a fait; vous pouvez aussi écrire votre propre code ou le faire manuellement (la spécification officielle, avec une section expliquant exactement comment convertir UTF-8 en UCS-4, peut être trouvée ici ). Il existe peut-être un moyen plus simple. Je ne suis pas encore très familiarisé avec le processus de conversion sous Linux.

Vous devez vous préoccuper uniquement des caractères entre \ xD800 et \ xDFFF inclus . Tous les autres caractères doivent correspondre exactement de UTF-16 à UCS-4 une fois remplis de zéro.

Ignacio a raison, si vous n'utilisez pas de rares caractères chinois (ou des scripts éteints), le mappage est un pour un. (le "jargon" officiel est "si vous n'avez pas de caractères en dehors de BMP")

Ceci est l'algorithme, juste au cas où:     http://unicode.org/faq/utf_bom.html#utf16-3 Mais encore une fois, probablement inutile pour votre cas réel.

Vous pouvez également utiliser les sources gratuites d'Unicode ( ftp://ftp.unicode.org / Public / PROGRAMS / CVTUTF )

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top