2017-01-30 2 views
1

Не уверен, что это проблема программирования. Я начал подозревать так ... но затем я запустил Java-программу (исполняемый jar), о которой идет речь, в консоли Windows, а не Cygwin ... и все получилось отлично: выходные акценты прекрасные, акцентированные входные данные приняты нормально. Итак, что следует, применимо только к консоли Cygwin.Проблемы с кодированием Cygwin

Я обрабатываю французский текст. Когда печатаются акцентированные символы (System.out), вместо этого печатается «хешированная коробка». Я видел здесь еще один вопрос, но не было никакого решения или правильного объяснения.

И когда я ввожу акцентированные символы, они читаются неправильно (Java System.in), например. «bénéfice» затем распечатывается (в журнале, который правильно обрабатывает кодировку) как «bà © n f ©».

Что вызывает недоумение (возможно) в том, что я могу набрать «bénéfice» в консоли. Шрифт Deja Vu Sans Mono предназначен для работы с Unicode, как я понимаю. Итак ... может быть, это связано с Java System.in и System.out потоками ???

Во избежание сомнений это Cygwin на платформе Windows (кто-нибудь использует Cygwin на не-ОС Windows?).

Я попытался изменить «Локаль» и набор символов и шрифт, перейдя в Options -> Text. Ничего не меняется. В настройках момент являются те, по умолчанию:
шрифта: Deja Vu Sans Mono
Язык: en_GB
набор символов: UTF-8

В командной строке, когда я иду

$ locale 

я

LANG=en_GB.UTF-8 
LC_CTYPE="en_GB.UTF-8" 
LC_NUMERIC="en_GB.UTF-8" 
LC_TIME="en_GB.UTF-8" 
LC_COLLATE="en_GB.UTF-8" 
LC_MONETARY="en_GB.UTF-8" 
LC_MESSAGES="en_GB.UTF-8" 
LC_ALL= 

Каждый знает, что я должен делать?

+0

Cygwin, конечно, предназначен только для Windows. Обратите внимание, что Java не является приложением cygwin, поэтому он, вероятно, будет игнорировать настройку локализации cygwin. – matzeri

+0

Спасибо. Итак ... на практике, что это может означать с точки зрения байтов и кодировок и возможного решения? Есть ли способ заставить Java отправлять потоки в определенную кодировку? Я признаюсь, кодирование всегда меня сбивало с толку. –

+0

Скорее всего, это просто несоответствие в кодировке, используемой вашим java-экземпляром и консолью cygwin. Возможно, стоит проверить кодировку символов, используемую вашим java-экземпляром. [Этот вопрос] (http://stackoverflow.com/questions/2415597/java-how-to-detect-and-change-encoding-of-system-console) также может быть весьма полезен при решении этой проблемы. – Paul

ответ

1

Спасибо Пол и Чжун Юй за ответы здесь.

Для печати на Cygwin делать такие вещи:

PrintStream out = new PrintStream(System.out, true, "UTF-8"); 
out.print(outputString); 

читать из Cygwin делать такого рода вещи:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in, "UTF-8")); 
String nextInputLine = br.readLine(); 

Немного удивлен, что этот вопрос еще не придумали, прежде чем снова Cygwin ,