Le stockage de l'unicode UTF-8 chaîne dans std::string
En réponse à la discussion dans le
Croix-plate-forme de chaînes de caractères (Unicode) en C++
Je suis en train d'affecter un UTF-8
chaîne std::string
variable dans Visual Studio 2010
environnement
std::string msg = "महसुस";
Cependant, quand j'ai vue la chaîne de vue débogueur, je ne vois que des "?????"
J'ai le fichier enregistré au format Unicode (UTF-8 avec Signature)
et je suis en utilisant le jeu de caractères "utiliser le jeu de caractères unicode"
"महसुस" est une langue népalaise et il contient de 5 caractères et de les occuper 15 octets. Mais débogueur visual studio affiche le msg taille 5
Ma question est:
Comment puis-je utiliser std::string pour stocker tout le utf-8 sans avoir à manipuler?
OriginalL'auteur Pritesh Acharya | 2014-04-24
Vous devez vous connecter pour publier un commentaire.
Si vous étiez à l'aide de C++11 alors ce serait facile:
Mais puisque vous n'êtes pas, vous pouvez utiliser les séquences d'échappement et ne pas compter sur la source du fichier charset pour gérer l'encodage pour vous, de cette façon, votre code n'est plus portable (dans le cas où vous avez accidentellement l'enregistrer dans un non-UTF8 format):
Sinon, vous pourriez envisager de faire une conversion à l'exécution au lieu:
OriginalL'auteur Remy Lebeau
Vous pouvez écrire
msg.c_str(), s8
dans les Montres de la fenêtre pour voir la chaîne UTF-8 correctement.est pour de l'UTF-8,
su
est multioctets jeu de caractères unicode.btw, si vous avez "utiliser le jeu de caractères unicode" dans votre configuration, comment savez-vous de l'affectation d'une chaîne UTF-8?
Acutally je ne sais pas la réponse à votre question. J'ai eu l'UTF-8 à partir d'une autre source et le coller dans le code source. Et j'ai mon fichier d'encodage en UTF-8. N'est-ce pas assez pour être assuré que l'affectation de chaîne UTF-8?
si vous utilisez des caractères multioctets dans votre projet - oui, si vous n'avez pas - pas.
OriginalL'auteur Sergey K.
Si vous avez le C++11, vous pouvez écrire
u8"महसुस"
. Sinon, vous devrez rédiger la séquence d'octets à l'aide de\xxx
pour chaque octet de l'UTF-8 de la séquence.Généralement, vous êtes mieux de la lecture d'un tel texte à partir d'un fichier de configuration.
Vous libérez-vous de la façon dont le compilateur peut l'interpréter. Aussi: il est nécessaire si vous voulez proposer plusieurs traductions différentes.
OriginalL'auteur James Kanze
Il y a un moyen d'afficher les valeurs de droite grâce à la "s8' spécificateur de format. Si nous append ',s8' pour les noms de variable, Visual Studio reparses le texte en UTF-8 et rend le texte correctement:
Dans le cas, vous êtes à l'aide de Microsoft Visual Studio 2008 Service Pack 1, vous devez appliquer le correctif
http://support.microsoft.com/kb/980263
Essayez de nouveau en ajoutant #pragma execution_character_set("utf-8")
n'a pas aidé.J'obtiens le même résultat
c'est le résultat de la Commande windows:
>? msg.c_str(),s8 "?????" >? msg.c_str(),su "㼿㼿?坎劲䤪⸭䬩⧌啍噉촀췍﷽﷽ꮫꮫꮫꮫﻮﻮ"
alfps.wordpress.com/2011/11/22/...
OriginalL'auteur DNamto
Si vous définissez les paramètres régionaux du système à l'anglais, et le fichier est en UTF-8 sans BOM, VC va vous permettre de stocker la chaîne de caractères comme-est. J'ai écrit un article à ce sujet ici.
OriginalL'auteur raymai97