Quel est l'équivalent Windows pour en_US.UTF-8?
Si je veux faire les travaux suivants sur Windows, quelle est la bonne locale et comment puis-je détecter qu'il est effectivement présent:
Le code de travail universaly, ou est-ce juste mon système?
OriginalL'auteur Let_Me_Be | 2010-12-01
Vous devez vous connecter pour publier un commentaire.
Fondamentalement, vous êtes hors de la chance: http://www.siao2.com/2007/01/03/1392379.aspx
Fondamentalement, cela se résume au fait que
wchar_t
sur Windows est expressément défini comme un type 16 bits. Le C (et C++) normes requièrentwchar_t
être en mesure de tenir aucun caractère valide à partir de tous codage pris en charge. Mais il y a aucun pour coder tous les caractères Unicode sur 16 bits -- il ne peut simplement pas être fait. Par conséquent, le Windows en C et C++ bibliothèques ne pas en fait, support de l'Unicode en tout genre. Si vous souhaitez utiliser l'Unicode sur Windows, vous devez aller à l'extérieur de la C et C++ bibliothèques. Oui, c'est stupide, mais à quoi vous attendiez-vous à partir de Microsoft? 😛Vous confondez 16 bits
wchar_t
et UTF-16. Ils ne sont pas la même chose. UTF-8 et UTF-16 sont deux façons différentes de faire de l'encodage de tous les points de code Unicode (ce qui n'est présent plus que juste 65535). Vous avez besoin d'au moins 24 bits pour représenter tous les 1 000 000 de+ points de code Unicode. Le "16" en UTF-16 n'est pas signifie que tous les caractères représentable à l'aide de seulement 16 bits (par exemple, certains caractères Unicode exiger 32 bits [deux de 16 bits unités de code ] lorsqu'ils sont encodés en UTF-16). Mais la bibliothèque C++ nécessitewchar_t
pour être en mesure de représenter de façon unique tous de caractères pris en charge.Non, la conversion à
wchar_t
est pas la même que la conversion en UTF-16. C'est précisément ce que j'essaie d'expliquer (bien que, probablement pas aussi bien que je le souhaiterais). Certains UTF-16 personnages vont avoir besoin de plus de 16 bits pour être en mesure de les représenter.wchar_t
, soit seulement 16-bits sur Windows, il ne peut donc pas représenter les caractères. Encore une fois, la norme exige quewchar_t
être en mesure de représenter de façon unique tous de caractères pris en charge.J'ai lu votre lié à la question, mais il semble que vous ne comprenez pas la réponse correcte. Certains (voire tous) de la les Api Windows peut interpréter
wchar_t
chaînes de caractères UTF-16 données codées, mais le C et le C++ bibliothèques ne pas. Si ils l'ont fait, alors vous pourriez utiliser l'UTF-8 comme un des paramètres régionaux pour le C et le C++ bibliothèques. Mais, vous ne pouvez pas. Et c'est la réponse à votre question ici 😉OriginalL'auteur
Bien qu'il n'y a pas un bon support pour les nommé locales, Visual Studio 2010 inclut la conversion en UTF-8 facettes requis par le C++11:
std::codecvt_utf8
pour UCS2 etstd::codecvt_utf8_utf16
pour l'UTF-16:cette sorties, sur mon Visual Studio 2010 EE SP1
OriginalL'auteur
Par MSDN, il serait nommé "english_us.65001". Mais le code de la page 65001 est un peu feuilletée sur Windows.
Je ne peux pas résumer mieux que google.com/search?q=site%3Ablogs.msdn.com+65001
Je suis désolé, mais je ne peux pas trouver quelque chose à la fois actuelle et suffisamment détaillé. Ce que je comprends de la court des messages de blog, j'ai lu, c'est que Windows n'a pas le support UTF-8 (ce qui n'a tout simplement pas de sens).
Il n'a pas le soutien implicite. Vous ne pouvez pas appeler
MessageBoxA("Hellö")
. Cependant, il a un soutien explicite:MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, utf8input.c_str(), ...
Ce que toutes ces réponses, essayez de dire, c'est qu'il n'est pas utf-8 sur windows.
OriginalL'auteur