2010-01-21 7 views
4

Mon but final est ici pour écrire une sortie de texte non latin à la console dans Windows via un programme C++. Cmd.exe ne m'amène nulle part, alors j'ai eu la dernière version brillante de PowerShell (qui supporte Unicode). Je l'ai vérifié que je peuxl'impression de caractères unicode dans PowerShell via un programme C++

  • type en caractères non-unicode et
  • voir la sortie console non-unicode de commandes de fenêtres (comme "dir")

par exemple, je ce fichier, « 가 txt » (가 est la première lettre de l'alphabet coréen) et je peux obtenir une sortie comme ceci:

PS P:\reference\unicode> dir .\가.txt 

    Directory: P:\reference\unicode 

Mode    LastWriteTime  Length 
Name              
----    -------------  ------ 
----              
-a---   1/12/2010 8:54 AM   0 가.txt  

jusqu'à présent, si bon. Mais écrire sur la console en utilisant un programme C++ ne fonctionne pas.

int main() 
{ 
    wchar_t text[] = {0xAC00, 0}; // 가 has code point U+AC00 in unicode 
    wprintf(L"%s", text); // this prints a single question mark: "?" 
} 

Je ne sais pas ce qui me manque. Le fait que je puisse taper et voir 가 sur la console semble indiquer que j'ai les trois morceaux nécessaires (support unicode, police et glyphe), mais je dois me tromper.

J'ai aussi essayé « chcp » sans aucune chance. Est-ce que je fais quelque chose de mal dans mon programme C++?

Merci!

+0

Je viens de remarquer que faire "PS> [char] 0xAC00" imprime le caractère correct. Donc, je suis en train de faire quelque chose de mal dans mon application ... –

Répondre

7

De printf docs:

se comportent wprintf et printf identique si le flux est ouvert en mode ANSI.

Consultez cette blog post. Il a cette belle petite annonce:

#include <fcntl.h> 
#include <io.h> 
#include <stdio.h> 

int main(void) { 
    _setmode(_fileno(stdout), _O_U16TEXT); 
    wprintf(L"\x043a\x043e\x0448\x043a\x0430 \x65e5\x672c\x56fd\n"); 
    return 0; 
} 
+0

Merci, ce fut beaucoup d'aide. Il s'avère que la spécification de _O_U16TEXT fonctionne correctement sur cmd.exe, mais pas sur Powershell. Je me suis arraché les cheveux jusqu'à ce que je découvre que le réglage de _O_U8TEXT fonctionne sur Powershell (mais avec du texte UTF-16!). Cela me semble être un bug dans Powershell, j'ai donc envoyé un bug à connect.microsoft.com. Je ne sais pas si quelqu'un le lit. J'espère que ce n'est qu'un simple mélange de leur part, plutôt que quelque chose de plus fondamentalement faux. Encore une fois, merci pour votre perspicacité à ce sujet. –

+0

Très bien. Je n'arrête pas d'oublier que Michael Kaplan est le premier arrêt pour toutes les choses Unicode. – jveazey

Questions connexes