12
votes

Ajouter des caractères Unicode / UTF8 à un affichage NCurs dans C

Je tente d'ajouter des caractères Unicode WCHAR_T à un affichage NCurses dans C.

J'ai un tableau: p> xxx pré>

et j'essaie plus tard d'ajouter un wchar_t De la matrice à l'écran NCurses avec: p> xxx pré>

Pour fournir un peu plus d'informations, ce faisant avec ASCII fonctionne bien, en utilisant: p>

ncursesutf8.c:48: warning: implicit declaration of function ‘add_wch’


1 commentaires

Notez également que vous ne devriez jamais transmettre aucune chaîne, mais "" à setlocale . Passage "" permet d'obtenir la locale configurée / système, qui devrait être UTF-8 en fonction de tout système moderne. Les noms tels que "c-utf-8" ne sont pas portables.


4 Réponses :


3
votes

Ceci est pas 2 caractères: xxx

Vous essayez d'initialiser wchar_t (entier) valeurs avec des pointeurs, qui devrait entraîner une erreur du compilateur. Utilisez: xxx

ou xxx


2 commentaires

Merci pour la pointe, mais cela ne résout pas le problème, voir mes modifications ci-dessus. Des idées?


@R ... Toute chance que vous ayez une réponse à cela?



1
votes

cchar_t est défini comme suit: xxx

afin que vous puissiez essayer: xxx

pas du tout testé , mais devrait fonctionner.


5 commentaires

Je vais essayer, j'espère que tu devilles bien;)


Eh bien, cela n'a pas fonctionné, CCHARW_MAX est indéfini, je n'ai vraiment aucune idée de la façon dont vous avez monté cela, certaines explications seraient utiles. J'ai aussi dû ajouter le cchar_t struct à la source, leur façon de la mettre en place, déduite qu'il était déjà défini (probablement dans les ncurses).


Attendez, faites-vous avoir add_wch? Ma documentation l'a, mais cela n'est apparemment pas défini dans mes nûts.h.


J'ai add_wch mais il ne semble pas fonctionner (la sortie de terminal est ? à la place des caractères Thai Unicode que j'utilise, ce qui montrent OK sinon, par exemple si je les entrez directement dans l'invite du terminal.)


D'accord, je suis excité alors. (L'avertissement dans votre message semble impliquer que vous n'avez pas add_wch , obtenez-vous toujours ça?) Peut-être post / lier vos nûtes.h?



27
votes

Le support de caractère large est géré par NCursesw. Selon votre distribution, les ncurses peuvent ou ne peuvent pas pointer là-bas (apparemment pas dans la tienne).

Essayez d'utiliser -Lncursesw au lieu de -Lncurses .

Aussi, pour les paramètres régionaux, essayez d'appeler setLocale (lc_all, "")


1 commentaires

Notez également que l'appel à SetLocale doit précéder initscr () .



1
votes

Avez-vous défini _xopen_source_exttended avant d'inclure l'en-tête NCurses?


1 commentaires

J'ai fini par faire cela dans Lisp au lieu de C. :)