Comment insérer de l'unicode dans un Richedit ?
bonjour,
j'aimerai pouvoir insérer des caractères japonais (qui seront stockés dans une base de données) dans un RichEdit. Quand je fais :
Code:
1 2 3 4 5 6 7 8 9 10
|
RichEdit1->SelAttributes->Name ="MS Mincho";
RichEdit1->SelAttributes->Charset =SHIFTJIS_CHARSET;
WideString wstr;
wstr='\u0041'; //--> A en unicode
RichEdit1->SelText = wstr;
wstr='\u3040'; //--> Hiragano "No" en unicode
RichEdit1->SelText = wstr; |
J'utilise une police supportant les caractères asiatiques ainsi que le bon charset ; or ce code affichera correctement le "A" mais le caractère asiatique sera remplacé par un "?".
Quand on insère un caractère asiatique par copier-coller, il s'affiche correctement dans le richedit mais, en examinant la chaine de texte en mémoire, je m'attendais a trouver ce caractère en notation unicode mais là encore, il est remplacé par un "?".
Bref, j'ai bcp de mal avec l'unicode et je n'ai pas trouvé de solution. Si qq1 avait un ptit tips...
Merci
Re: Comment insérer de l'unicode dans un Richedit ?
Citation:
Envoyé par DanaKil
bonjour,
j'aimerai pouvoir insérer des caractères japonais
J'utilise une police supportant les caractères asiatiques ainsi que le bon charset ; or ce code affichera correctement le "A" mais le caractère asiatique sera remplacé par un "?".
Quand on insère un caractère asiatique par copier-coller, il s'affiche correctement dans le richedit mais, en examinant la chaine de texte en mémoire, je m'attendais a trouver ce caractère en notation unicode mais là encore, il est remplacé par un "?".
Bref, j'ai bcp de mal avec l'unicode et je n'ai pas trouvé de solution. Si qq1 avait un ptit tips...
Merci
Bonjour,
J'ai découvert le forum hier ! Et j'y ai mis une requête qui parlait de mes problèmes pour écrire des caractères japonais...(Voir le message "Comment gérer des chaînes de caractères japonais ?" du 24 Mars que j'ai malencontreusement placé dans le forum C++ au lieu de celui-ci).
Tu constateras que j'ai un peu les mêmes problèmes que toi. Quelques différences cependant :
1 - Autant que je l'ai compris (je suis débutant en C++) l'Unicode n'est pas la même chose que les polices multibytes. Ces dernières utilisent un nombre variable d'octets pour stocker les caractères (le plus souvent 1 ou 2, mais parfois semble-t-il jusqu'à 3 ou 4 !) alors que l'Unicode standardise à 2 le nombre d'octets par caractères. Personnellement, jusqu'à présent je travaille sur Shift_JIS qui est un Charset Multibyte et pas de l'Unicode (encore une fois, je ne maîtrise pas le problème ; c'est ce que j'ai compris mais je peux me tromper). C'est d'ailleurs la raison de mes problèmes : il faut pouvoir repérer les caractères et donc balayer les chaînes depuis le début en sautant d'un caractère chaque fois que l'on voit un caractère mono-octet et de 2 s'il y en a un de deux octets. Il semble qu'il existe des fonctions spéciales pour cela (voir MBCS dans l'aide de Borland C++Builder), par exemple ByteType qui détermine si un octet est seul ou le premier d'un groupe de deux. Mon problème est qu' il faut trouver le moyen de "dire" au système que je veux qu'il m'analyse ma chaîne avec le Charset "Shift_JIS". Deux personnes m'ont déjà conseillé d'utiliser des wchar_t (si je me souviens bien, c'est-à-dire des sortes de "char" sur 2 octets. Mais jusqu'à présent j'ai rechigné à la tâche qui me semble énorme). Je constate que ton problème avec Unicode donne raison à ma circonspection..., car comment dire au programme que l'on parle en "Unicode" ; je pense que cela doit être aussi difficile (ou aussi facile) que de lui dire "ima kara, nihongo hanashimashou" (désolé pour la fonte...), et c'est exactement ça que je ne sais pas faire !!!!!
2 - J'ai moi aussi constaté qu'un RichEdit marchait bien avec du japonais si l'on faisait un copier-coller (à partir d'un écran WORD d'un fichier utilisant la fonte "MS Mincho", alors que cela ne marchait pas de définir RichEdit par programme : on obtient bien des ????. Par contre, j'ai vu que le Label peut très bien être défini "de l'intérieur" en plaçant les codes byte "à la main" dans une chaine char* (ch[0]=129, ch[1]=37,ch[2]=0, par exemple) et en définissant Label->Caption=AnsiString(ch), à la seule condition que Label->Font soit "MS Mincho" et que Label->Font->Charset soit "Shift_JIS". Ca marche alors très bien !
Je pense que ce paragraphe 2 répond à l'une de tes questions. En ce qui me concerne, je peux m'en tirer avec des Label, alors je me passerai du RichEdit. J'attends avec impatience celui qui m'indiquera la petite fonction miracle permettant de dire au programme "à partir de maintenant on parle en japonais" et à la fin "bon, revenons à notre bon vieux terroir..." et qui m'autorisera à utiliser ces fameuses fonctions spéciales MBCS.
Espérant avoir été de quelque utilité. A bientôt