Voici un tutoriel à explorer. Jetez un coup d'œil à cet article pour le rectangle vertical noir .
En supposant qu'Unicode est activé, envoyez la chaîne suivante à une fenêtre à afficher :
Wchar_t mStr[] = {9646,0,0};
Référence . Cet extrait de code et cette référence sont plus conformes au C++. Vous pouvez activer ou désactiver l'UNICODE dans Visual C++ en suivant les étapes suivantes :
-
Ouvrez votre projet dans VS2008/2010 ;
-
Cliquez à droite sur le projet dans l'explorateur de solutions et cliquez sur Propriétés ;
-
Sélectionnez Configuration Properties-> General
, sélectionnez Character Set
et changer le current value
à Use Multi-Byte Character Set
. (s'éteignant)
Bon article sur le sujet Affichage de l'UNICODE en VB .
Lorsque vous travaillez avec un textbox
contrôle dans un Form
, ajoutez le Microsoft Forms 2.0 Object Library
comme une bibliothèque de référence. Ce composant fournit des contrôles supportés par Unicode Il s'agit de zones de texte, d'étiquettes, de boutons de commande, de boîtes de liste, de boîtes combo, de cases à cocher, de boutons radio, de boutons à bascule, d'images, de bandes de tabulation et de contrôles de pages multiples.
Pour travailler avec VB6 et afficher des caractères non US-ANSI, il faut comprendre trois choses principales :
- En interne, VB6 stocke les chaînes de caractères en Unicode.
- Lors de l'affichage d'une chaîne de caractères, le contrôles de zones de texte et d'étiquettes VB6 standard effectuer une conversion implicite (et interne) d'Unicode à ANSI.
- En contrôles de zones de texte et d'étiquettes VB6 standard afficher les octets ANSI selon un codage de caractères que vous pouvez spécifier.
Après le Unicode-to-ANSI
VB6 tente ensuite d'afficher les données des caractères en fonction de l'adresse du contrôle. Font.Charset
qui, si elle n'est pas modifiée, est égale au jeu de caractères ANSI. La modification de la propriété Font.Charset
change la façon dont VB6 interprète les octets "ANSI". En d'autres termes, vous demandez à VB6 de traiter les octets comme un autre codage de caractères au lieu de "ANSI".
Par exemple, imaginez que vous essayez d'afficher une Unicode Japanese
sur un English
ordinateur : Vous réglez le Font.Charset = 128
(pour le japonais), mais votre chaîne Unicode s'affiche avec tous les caractères de point d'interrogation. C'est parce que VB6 essaie d'abord de convertir votre chaîne Unicode japonaise en ANSI, qui est Windows-1252 pour les ordinateurs anglais. Les caractères japonais ne sont pas représentables dans Windows-1252. Chaque caractère échoue à la conversion et est remplacé par un point d'interrogation. Par exemple, sélectionner le script japonais dans les paramètres de propriété du contrôle TextBox revient à définir le Font.Charset au moment de l'exécution.
En Jukka a dit Font
joue un rôle essentiel en montrant les UNICODEs compte tenu de la disponibilité des caractères dans une police. Comme l'a dit Hans, glyph
Une police non supportée produit un rectangle. Vous devez donc vous assurer que la Font
que vous choisissez est capable de le rendu des glyphes . Par exemple MS Sans Serif
La police ne s'affiche pas ƒ
(LATIN SMALL LETTER F WITH HOOK, la valeur Unicode sur 2 octets est 0x0192), donc vous verrez un boîte rectangulaire solide et mince à sa place. Cependant, sous Windows, il existe très peu de polices disposant d'un répertoire de caractères suffisamment large pour représenter le chinois
Dans le code suivant, le nom de la police () est défini pendant l'exécution avec le CharSet de la police.
Propriétés du jeu de caractères :
134 Simplified Chinese, gb2312 - Mainland China(PRC) and Singapore
136 Traditional Chinese, big5 - Taiwan and Hong Kong
Code :
Sub changeToUniCodes()
Dim strTxt2 As String
UserForm1.TextBox2.Font.Charset = 134 '--CHINESESIMPLIFIED_CHARSET
UserForm1.TextBox2.Font.Name = ChrW(&H5B8B) + ChrW(&H4F53) '-- SimSun font
UserForm1.TextBox2.Text = ChrW(37446)
strTxt2 = UserForm1.TextBox2.Text
'notice that ChrW(9246) produces a different character in Chinese
UserForm1.TextBox2.Text = strTxt2 & " " & ChrW(9246)
End Sub
Sortie en VBE IDE : Vous pouvez aussi l'essayer en VB6.
Après avoir écrit tout ce qui précède, j'ai remarqué ceci MSDN article. Au moins, c'est une confirmation VB :D