Вывод Java System.out в Юникоде - PullRequest
4 голосов
/ 14 июля 2011

В настоящее время я работаю над текстовой игрой на Java, в которую играют в интерпретаторе командной строки.

Проблема заключается в том, что я хочу повторить в командной строке немецкий umlaute (строка ü ö ä ß), который по умолчанию не поддерживается в Windows-системах. Однако я нашел способ достичь этого с помощью нескольких вещей:

  • Я изменил кодовую страницу на 65001 (используя chcp 65001)
  • Я изменил шрифт на Console Lucida
  • Я использовал PrintStream с кодировкой UTF-8 для печати в команду строка (в Java-программе).

После этого работает вывод символов UTF-8 в командной строке. Но это не настройка по умолчанию на каждом ПК.

Итак, я подумал, что я создаю Batch-файл для запуска игры, который выполняет базовую настройку для включения вывода UTF-8. Изменение кодовой страницы и использование UTF-8 PrintStream не проблема, но изменить шрифт довольно сложно.

Шрифт должен быть установлен на каждой Windows, начиная с Windows XP SP2, так что это не должно быть проблемой. Кроме того, вы можете изменить шрифт, изменив запись в реестре, но это требует некоторых привилегий и не является опцией.

Я погуглил, но не нашел font -команды. Есть ли обходной путь для изменения шрифта консоли?

1 Ответ

2 голосов
/ 14 июля 2011

Я немного поэкспериментировал, и вы можете достичь этого без каких-либо сценариев и без JNI: Lucida можно выбрать, сделав ссылку на cmd.exe и отредактировав свойства этой ссылки.

Я открыл ссылку в hex-редакторе, чтобы увидеть, что там выбрана Lucide Console. Самое интересное, что внутри ссылки закодирован абсолютный путь к cmd.exe (в моей системе это D: \ Win ...), а затем я скопировал ссылку на другой компьютер, чтобы увидеть, если он Волшебно также работает там (Windows находится на C-Drive на этом компьютере), и это делает: Windows фиксирует абсолютный путь к cmd.exe для вас, и консоль, которая открывается на этом компьютере, также установлена ​​на Lucida.

Теперь все, что вам нужно, чтобы открыть вашу программу внутри этой консоли (и заставить ее печатать в этой консоли), все, что вам нужно, это командный файл, содержащий имя файла ссылки (оканчивающегося на .lnk, который скрыт в большинстве систем ), за которым следует название вашей программы, например:

c.lnk t.exe

, так как вы используете Java, я думаю, вам придется написать что-то вроде:

c.lnk java sth.jar

Я создал минимальный пример, который вы можете найти здесь:

http://www.mediafire.com/?1yn40gsed3isjut

содержит:

  • минимальный t.exe, который просто выскочит, открывает MessageBox (если вы не доверяете t.exe, просто откройте его в блокноте или pedump и увидите, что он вызывает только MessageBox, никаких других API-функций)

  • ссылка c.lnk на cmd.exe, настроенная для использования Lucida, (абсолютный путь будет установлен Windows при ее запуске)

  • .bat-файл, который вызывает t.exe через c.lnk

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...