Выполнение cmd через CodeBlocks не позволяет использовать шрифт MS Gothic - PullRequest
0 голосов
/ 17 ноября 2018

Когда я строю свою программу в 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 ]

0 голосов
/ 19 ноября 2018

Я нашел решение, которое также ответило, как я смог напечатать японский текст ранее.

Для того, чтобы обмануть 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, но по крайней мере он снова работает для меня.

0 голосов
/ 17 ноября 2018

Командная оболочка cmd - это устаревший эмулятор терминала, который не может «просто делать» другие языки.Это невероятно глупо, и ему нужно рассказать, как декодировать байт-код на основе более чем 20-летней концепции Windows Codepages.Если вы хотите увидеть японский язык вообще, вам сначала нужно определить, какую кодировку ваш текст использует на самом деле, например, JSIS, EUC, ... - Глядя на ваш код, есть инструкция chcp для использования кодовой страницы 65001, но ничего, что фактически показывает, что это будет правильная кодовая страница, основанная на том, что сгенерирует компиляция, поэтому вам нужно будет выяснить, какую фактическую последовательность байтов она выводит, а затем использовать правильную кодовую страницу на основе того, что вы знаете о тексте,и из каких кодовых страниц кодируется какой текст, с какими байтовыми последовательностями.

Или, и этот способ проще: не используйте cmd, если вам нужен современный эмулятор терминала, совместимый с юникодом.Если вы выполняете любой вид смешанного языка или Unicode, просто используйте что-то вроде Console2 , что я бы порекомендовал в любой день недели.Ваша программа будет отлично работать с выводом этого.

...