Po pierwsze, zazwyczaj nie jest dobrym pomysłem użycie znaków non-ascii w kodzie źródłowym. Prawdopodobnie dzieje się tak, że chińskie znaki są kodowane jako UTF-8, który działa z ascii.
Teraz, dlaczego wprintf()
nie działa. Ma to związek z orientacją strumienia. Każdy strumień może być ustawiony tylko na normalny lub szeroki. Raz ustawiony, nie można go zmienić. Jest ustawiany przy pierwszym użyciu. (który jest ascii ze względu na printf
). Po tym czasie wprintf
nie będzie działał z powodu nieprawidłowej orientacji.
Innymi słowy, po użyciu printf()
należy nadal używać printf()
. Podobnie, jeśli zaczynasz od wprintf()
, musisz nadal używać wprintf()
.
Nie można wymieszać printf()
i wprintf()
. (Z wyjątkiem Windows)
EDIT:
Aby odpowiedzieć na pytanie, dlaczego linia wprintf
nie działa nawet sama. Jest tak prawdopodobnie dlatego, że kod jest kompilowany w taki sposób, że format UTF-8 z 中日友好
jest przechowywany w wchar_
. Jednak kod wchar_t
wymaga 4-bajtowego kodowania Unicode. (2 bajty w Windows)
Więc tam dwie opcje, które mogę myśleć:
- Nie przejmuj się
wchar_t
, i po prostu trzymać się z multi-byte char
ów. Jest to prosty sposób, ale może się zepsuć, jeśli system użytkownika nie jest ustawiony na chińskie ustawienia narodowe.
- Użyj
wchar_t
, ale będziesz musiał kodować chińskie znaki za pomocą sekwencji unikowych Unicode. To oczywiście spowoduje, że nie będzie można go odczytać w kodzie źródłowym, ale będzie działać na każdym komputerze, który może drukować chińskie czcionki znaków, niezależnie od ustawień regionalnych.
Jakiego kompilatora używasz? GCC domyślnie korzysta z Utf-8 o większości platform. Wydaje mi się, że mam problem z kodowaniem. – cyco130
@ cyco130, tak, gcc – Alcott