У меня проблемы с широкими строковыми литералами с использованием компилятора MinGW GCC на Windows.Широкие символы string literal
Когда я читаю пользовательский ввод, используя wscanf
, wprintf
выдает правильные национальные символы. Однако широкие строковые литералы останавливает вывод на первом национальном характере:
wprintf (L"China - Čína"); // outputs "China - "
Предполагая, что wchar_t кодируется как UTF-16 по умолчанию (это такое LE или BE?), Как оно работает, когда источник находится в UTF-8 файл? Я попытался сохранить исходный код как UTF-16, но получаю незаконную последовательность байтов.
Кодирование исходного кода не связан с кодировкой, используемой программой когда он работает. Ваш исходный код может быть в любой кодировке, которую вы хотите, до тех пор, пока компилятор знает, что это такое, чтобы он мог перевести ваши строковые литералы в набор символов времени исполнения. – Wyzard
, в том числе '', а затем сделать вызов для' setlocale (LC_ALL, «sk»); '(или' 'cz" 'или какой бы язык был« Čína ») до этой строки' wprintf' у вас там, должен правильно отобразить текст, который вы положили. Однако это не так. Я не могу напечатать «Č» с перевернутым обводным акцентом. Извините ... –
ThoAppelsin
Проверьте с видом памяти в вашем отладчике область памяти, содержащую строку. Если он есть в памяти, это не проблема, связанная с компилятором. Если это не связано с компилятором, то это может быть какая-то причудливая проблема, связанная с библиотекой времени выполнения. Другим возможным случаем может быть то, что ваше устройство вывода (консольная или консольная эмуляция или что-то еще) не поддерживает каждый символ юникода, который вы хотите выводить и ведет себя иначе, чем вы ожидали бы в случае причудливых символов. – pasztorpisti