Comment puis-je imprimer l'UTF-8 à partir de c++ application en mode console sous Windows
Pour une application console C++ compilé avec Visual Studio 2008 sur la version anglaise de Windows (XP,Vista ou 7). Est-il possible d'imprimer la console et afficher correctement codé en UTF-8 le Japonais à l'aide de cout ou wcout?
- Il y a un fil intéressant à cplusplus.com : UTF-8 dans l'invite de commande (console) cplusplus.com/forum/windows/9797
- les nouveaux Arrivants: Vérifier ma réponse ici sur l'utilisation de l'unicode et vérifier cette réponse sur la modification de la console de police.
Vous devez vous connecter pour publier un commentaire.
La console Windows utilise le Page de codes OEM par défaut à la sortie d'affichage.
Pour modifier la page de code Unicode entrer
chcp 65001
dans la console, ou d'essayer de modifier la page de code par programmation avecSetConsoleOutputCP
.Noter que vous devrez probablement changer la police de la console pour celui qui a des glyphes dans la palette unicode.
Voici un article de MVP Michael Kaplan sur comment mettre correctement en sortie de l'UTF-16 par le biais de la console. Vous pouvez convertir votre UTF-8, UTF-16 et de sortie.
Je n'ai jamais essayé le réglage de la console à la page de code pour de l'utf-8 (je ne sais pas pourquoi ça ne marcherait pas... la console peut gérer d'autres multi-byte-code-pages très bien), mais il ya un couple de fonctions pour regarder vers le haut: SetConsoleCP et SetConsoleOutputCP.
Vous aurez probablement devez également vous assurer que vous utilisez une console de police qui est capable d'afficher vos personnages. Il y a le SetCurrentConsoleFontEx fonction, mais il est seulement disponible sur Vista et au-dessus.
Espère que ça aide.
Cela devrait fonctionner:
Ne sais pas si elle touche quelque chose, mais la source du fichier est enregistré en tant que Unicode (UTF-8 avec signature) - page de Codes 65001 à FICHIER -> Options d'enregistrement Avancées ....
Projet -> Propriétés -> Propriétés de Configuration -> Général -> Jeu de Caractères est fixé à Utiliser Jeu de Caractères Unicode.
Certains disent que vous avez besoin de changer de police pour la console de Lucida Console, mais de mon côté il est affiché avec deux Consolas et Lucida Console.
Sur l'app démarrage de la console par défaut OEM437 CP.
J'essayais de sortie Unicode texte sur la sortie standard, où la console a été interrupteur à UTF8 traduction _setmode(_fileno(stdout), _O_U8TEXT); et toujours pas eu de chance sur l'écran même avec Lucida TT de police.
Si la console a été redirigé vers un fichier, corrects UTF8 fichiers ont été créés.
Enfin j'ai eu de la chance. J'ai ajouté une ligne info.FontFamily = FF_DONTCARE;" et il travaille maintenant.
Espérons que cette aide pour vous.
Juste pour des renseignements supplémentaires:
'ANSI' fait référence à windows-125x, utilisé pour les applications win32 tandis que " OEM " se réfère à la page de code utilisée par la console/applications MS-DOS.
Courant actif code des pages peuvent être récupérées avec des fonctions GetOEMCP() et GetACP().
Dans l'ordre à la sortie de quelque chose de correctement à la console, vous devez:
assurer l'actuelle page de codes OEM prend en charge les caractères que vous voulez de sortie
(si nécessaire, utilisez SetConsoleOutputCP pour la régler correctement)
convertir la chaîne de caractères à partir de l'actuel code ANSI (win32) à la console de page de codes OEM
Voici quelques utilitaires pour le faire:
Dans la console, entrez
chcp 65001
pour modifier la page de code pour que de l'UTF-8.