Выполнение cmd через CodeBlocks не позволяет использовать шрифт MS Gothic
Когда я строю свою программу в CodeBlocks, cmd отображает два разных списка шрифтов для "По умолчанию" и "Свойства".
По умолчанию -> Шрифт: MSゴシック (MS Gothic), Растровые шрифты
Свойства -> Шрифт: Consolas, Lucida Console, Растровые шрифты
Как следствие, я не могу печатать японские символы с помощью программ, встроенных в CodeBlocks. Даже при том, что MS Gothic, по-видимому, выбран в качестве значения по умолчанию, это полностью игнорируется для окончательного выполнения, которое распознает только шрифты, перечисленные в разделе "Свойства".
Когда cmd запускается без CodeBlocks, нет различий между параметрами по умолчанию и свойствами: они оба показывают MS Gothic и растровые шрифты. Я хотел бы продолжить использование CodeBlocks однако.
Пример кода со случайным кандзи для тестирования:
#include <iostream>
#include <windows.h>
#include <stdio.h>
using namespace std;
int main()
{
system("chcp 65001 > nul");
printf("姥栄泳");
return 0;
}
Что меня смущает еще больше, так это то, что я смог использовать эту настройку за день или два, прежде чем cmd решил быть трудным. Я понятия не имею, что изменилось, чтобы сделать эту ошибку, и отменить мою способность печатать японские символы с помощью Code::Blocks.
Разные детали:
- ОС - Windows 8.1 Pro, 64-битная ОС, x64-процессор
- Системный язык установлен на японский (чтобы разрешить шрифт MS Gothic, чтобы символы JP могли печататься вообще в cmd)
- Code:: Blocks Ver 17.12
- Компилятор GNU GCC, mingw32-g++. Exe ver 5.1.0.
- Переустановка Code:: Blocks не решила проблему
Заранее спасибо!
2 ответа
Я нашел решение, которое также ответило, как я смог напечатать японский текст ранее.
Для того, чтобы обмануть Code::Blocks при активации cmd с включенной MS Gothic, я сначала должен использовать ссылку на кодовую страницу Shift JIS:
system("chcp 932 > nul");
Создайте проект с этой кодовой страницей символов, даже если она не будет правильно печатать японские символы (предположительно, поскольку я использую символы с кодировкой UTF-8, а не Shift JIS).
Затем отмените ссылку на chcp 932 и замените ее на chcp 65001. Создайте проект, и теперь cmd будет использовать MS Gothic и отображать правильные японские символы, ДАЖЕ ЧЕРЕЗ, он утверждает, что следующие шрифты доступны только для использования:
Свойства -> Шрифт: Consolas, Lucida Console, Растровые шрифты
Если вы выберете любой из этих шрифтов, даже если повторно выберете тот, который выбран в настоящий момент, cmd поймет, что не может использовать MS Gothic, и вместо этого японские символы будут заменены квадратами.
Я понятия не имею, почему Code::Blocks делает это так, что cmd нужно обмануть, чтобы принять MS Gothic, но, по крайней мере, он снова работает для меня.
cmd
Командная оболочка - это устаревший эмулятор терминала, который не может "просто делать" другие языки. Это невероятно глупо, и ему нужно рассказать, как декодировать байт-код, основываясь на более чем 20-летней концепции Windows Codepages. Если вы хотите увидеть японский язык вообще, вам сначала нужно определить, какую кодировку ваш текст использует на самом деле, например, JSIS, EUC, ... - Глядя на ваш код, есть chcp
инструкция по использованию кодовой страницы 65001, но ничего, что фактически показывает, что это будет правильная кодовая страница, основанная на том, что сгенерирует компиляция, так что вам нужно будет выяснить, какую фактическую последовательность байтов она выводит, а затем использовать правильную кодовую страницу, основываясь на том, что вы знать о тексте, и о том, какие кодовые страницы кодируют, какой текст, с какими последовательностями байтов.
Или, и этот способ проще: не используйте cmd
если вам нужен современный эмулятор терминала, совместимый с юникодом. Если вы работаете со смешанным языком или с юникодом, просто используйте что-то вроде Console2, что я бы порекомендовал в любой день недели. Ваша программа будет отлично работать с выводом, полученным этим.