Prima di tutto, di solito non è una buona idea usare caratteri non ASCII nel codice sorgente. Quello che probabilmente sta succedendo è che i caratteri cinesi vengono codificati come UTF-8 che funziona con ASCII.
Ora, come per il motivo che il wprintf()
non funziona. Questo ha a che fare con l'orientamento del flusso. Ogni stream può essere impostato su normale o ampio. Una volta impostato, non può essere modificato. È impostato la prima volta che viene utilizzato. (che è ascii a causa di printf
). Successivamente, lo wprintf
non funzionerà a causa dell'orientamento errato.
In altre parole, una volta utilizzato printf()
è necessario continuare a utilizzare printf()
. Allo stesso modo, se si inizia con wprintf()
, è necessario continuare a utilizzare wprintf()
.
Non è possibile mescolare printf()
e wprintf()
. (Eccetto Windows)
EDIT:
di rispondere alla domanda sul perché la linea wprintf
non funziona anche da solo. Probabilmente è perché il codice viene compilato in modo che il formato UTF-8 di 中日友好
sia memorizzato in wchar_
. Tuttavia, wchar_t
richiede la codifica unicode a 4 byte. (2-byte in Windows)
Quindi ci sono due opzioni che mi viene in mente:
- Non perdete tempo con
wchar_t
, e solo bastone con multi-byte char
s. Questo è il modo semplice, ma potrebbe interrompersi se il sistema dell'utente non è impostato sulle impostazioni internazionali cinesi.
- Utilizzare
wchar_t
, ma è necessario codificare i caratteri cinesi utilizzando sequenze di escape unicode. Questo ovviamente lo renderà illeggibile nel codice sorgente, ma funzionerà su qualsiasi macchina in grado di stampare caratteri di caratteri cinesi indipendentemente dalle impostazioni locali.
Che compilatore stai utilizzando? Il GCC ha come valore predefinito Utf-8 o la maggior parte delle piattaforme. Sembra un problema di codifica per me. – cyco130
@ cyco130, si, gcc – Alcott