Прежде всего, обычно не очень хорошая идея использовать не-ascii символы в исходном коде.Вероятно, происходит то, что китайские символы кодируются как UTF-8, который работает с ascii.
Теперь о том, почему wprintf()
не работает.Это связано с ориентацией потока.Каждый поток может быть установлен только на нормальный или широкий.После установки его нельзя изменить.Устанавливается при первом использовании.(что связано с printf
).После этого wprintf
не будет работать из-за неправильной ориентации.
Другими словами, если вы используете printf()
, вам нужно продолжать использовать printf()
.Точно так же, если вы начинаете с wprintf()
, вам нужно продолжать использовать wprintf()
.
Вы не можете смешивать printf()
и wprintf()
.(кроме Windows)
EDIT:
Чтобы ответить на вопрос о том, почему строка wprintf
не работает даже сама по себе.Вероятно, это потому, что код компилируется так, что формат UTF-8 中日友好
сохраняется в wchar_
.Однако для wchar_t
требуется 4-байтовое кодирование Unicode.(2 байта в Windows)
Итак, я могу придумать два варианта:
- Не беспокойтесь о
wchar_t
, а просто придерживайтесь многобайтовых char
s.Это простой способ, но он может сломаться, если система пользователя не настроена на китайский язык. - Используйте
wchar_t
, но вам нужно будет кодировать китайские символы, используя escape-последовательности Юникода.Это, очевидно, сделает его нечитаемым в исходном коде, но оно будет работать на любом компьютере, который может печатать шрифты китайских символов независимо от локали.