En primer lugar, generalmente no es una buena idea usar caracteres que no sean ASCII en el código fuente. Lo que probablemente está sucediendo es que los caracteres chinos están siendo codificados como UTF-8, que funciona con ascii.
Ahora, en cuanto a por qué el wprintf()
no está funcionando. Esto tiene que ver con la orientación del flujo. Cada flujo solo se puede establecer en normal o ancho. Una vez configurado, no se puede cambiar. Se establece la primera vez que se usa. (que es ascii debido al printf
). Después de eso, el wprintf
no funcionará debido a una orientación incorrecta.
En otras palabras, una vez que usa printf()
debe seguir usando printf()
. Del mismo modo, si comienza con wprintf()
, debe seguir usando wprintf()
.
No puede entremezclar printf()
y wprintf()
. (Excepto en Windows)
EDIT:
Para responder a la pregunta de por qué la línea wprintf
no funciona incluso por sí mismo. Probablemente sea porque el código se está compilando para que el formato UTF-8 de 中日友好
se almacene en wchar_
. Sin embargo, wchar_t
necesita una codificación Unicode de 4 bytes. (2 bytes) de Windows
Así que hay dos opciones que se me ocurren:
- no se moleste con
wchar_t
, y sólo se adhieren con múltiples bytes char
s. Esta es la manera fácil, pero puede romperse si el sistema del usuario no está configurado en la configuración regional china.
- Utilice
wchar_t
, pero deberá codificar los caracteres chinos mediante secuencias de escape Unicode. Obviamente, esto hará que no se pueda leer en el código fuente, pero funcionará en cualquier máquina que pueda imprimir fuentes de caracteres chinos, independientemente de la configuración regional.
¿Qué compilador estás usando? GCC se predetermina a Utf-8 en la mayoría de las plataformas. Parece un problema de codificación para mí. – cyco130
@ cyco130, sí, gcc – Alcott