Impression correcte des caractères UTF-8 dans la console Windows
Cet article vise à résoudre les défis rencontrés lors de la tentative d'impression de caractères UTF-8 dans la console Windows.
Description du problème
Les utilisateurs ont rencontré des difficultés lors de l'affichage des caractères allemands à l'aide d'un extrait de code spécifique :
#include
#include
int main() {
SetConsoleOutputCP(CP_UTF8);
// German characters not appearing
char const* text = "aäbcdefghijklmnoöpqrsßtuüvwxyz";
int len = MultiByteToWideChar(CP_UTF8, 0, text, -1, 0, 0);
wchar_t *unicode_text = new wchar_t[len];
MultiByteToWideChar(CP_UTF8, 0, text, -1, unicode_text, len);
wprintf(L"%s", unicode_text);
}
Malgré la définition de la page de codes de sortie sur UTF-8, les caractères allemands ne sont pas imprimés correctement.
Solution
Pour imprimer correctement les données Unicode dans le Console Windows, plusieurs méthodes sont disponibles :
Dépannage
En cas de sortie incorrecte avec la troisième méthode :
putc('\302'); putc('\260'); // doesn't work with CP_UTF8
puts("\302\260"); // correctly writes UTF-8 data to Windows console with CP_UTF8
Cela est dû au fait que l'API de la console interprète les données transmises dans des appels séparés comme des encodages illégaux lors de l'utilisation de CP_UTF8.
Pour résoudre ce problème, envisagez de créer une sous-classe streambuf qui gère avec précision la conversion de caractères multi-octets et maintient l'état de conversion entre les écritures.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3