Después de de esta larga compilación de información pudimos solucionar esta dificultad que pueden tener algunos de nuestros usuarios. Te ofrecemos la solución y esperamos que te sea de gran apoyo.
Solución:
Dos problemas: en primer lugar, un wchar_t
debe estar impreso con %lc
formato, no %c
. La segunda es que a menos que llames setlocale
el conjunto de caracteres no está configurado correctamente, y probablemente obtenga ?
en lugar de tu estrella. Sin embargo, el siguiente código parece funcionar:
#include
#include
#include
int main()
setlocale(LC_CTYPE, "");
wchar_t star = 0x2605;
wprintf(L"%lcn", star);
Y para ncurses
simplemente inicialice la configuración regional antes de la llamada a initscr
.
Ya sea que esté utilizando stdio o ncurses, debe inicializar la configuración regional, como se indica en el manual de ncurses. De lo contrario, las codificaciones multibyte como UTF-8 no funcionan.
wprintw
no necesariamente sabe sobre wchar_t
(aunque puede usar el mismo subyacente printf
esto depende de la plataforma y la configuración).
Con ncurses, mostraría un wchar_t
de cualquiera de estas formas:
- almacenarlo en un array de
wchar_t
y usandowaddwstr
o - almacenándolo en un
cchar_t
estructura (consetcchar
), y utilizandowadd_wch
con eso como parámetro, o - convirtiendo el
wchar_t
a un multibyte stringy usandowaddstr