Вопрос по java, unicode, intellij-idea – символы Unicode отображаются в виде вопросительных знаков в консоли IntelliJ IDEA

10

Я пытаюсь написать символы Юникода (& # x2660;), используя System.out, и вместо этого печатается знак вопроса.

Как я могу отображать правильные символы Юникода вместо вопросительных знаков?

Я использую IntelliJ IDEA в Windows и пытаюсь печатать из IDE.

Ваш Ответ

7   ответов
2

системы, обычно это ISO-8859-1 или UTF-8. Первое - это то, что у меня есть с кодовой страницей 1252 под XP.

Это в окне CMD.EXE или внутри IDE?

Для начала я не знаю IntelliJ. Eran
0

никода в стандартной командной строке в Windows, вам придется потрудиться. Растровый шрифт по умолчанию не поддерживает символы, и приложения обычно должны вызывать консольный API Unicode для их отображения. Java этого не делает - сначала кодирует символы в собственный набор символов (процесс с потерями), а затем генерирует их с помощью вызова ANSI. Ты можешь читать это сообщение в блоге если хочешь подробностей.

4

что «Настройки | Кодировки файлов» использует UTF-8. Печать ♠ работает, когда у меня есть кодировка IDE и все файлы установлены в UTF-8. Перекомпиляция может потребоваться после изменения кодировки.

0

убедитесь, что для ваших кодировок файлов установлено значение UTF-8, в частности «Файлы свойств кодировки по умолчанию». С моей стороны, шаги ниже не работали, пока я не изменил кодировку по умолчанию.

На Intellij 2017.3.1 (Community Edition) Файл | Настройки | Редактор> Кодировки файлов. Нажмите на ссылку ниже, чтобы увидеть настройки изображения

Intellij 2017.3.1 (Community Edition)

12
Небольшое обновление за 2015 год

TL; DR ответ:

Перейти кSettings ->Editor ->File Encodings ->Project Encoding и установите для него значение "UTF-8".

Расширенный ответ:

Причину, по которой это не работает, можно узнать, установив точку останова наSystem.out.print() вызов. Когда наступит точка останова, вы можете добавитьSystem.out вWatches, и вы можете видеть, чтоSystem.out.textOut.out.se.cs установлен наwindows-1252 или что-то такое же неподходящее.

Настройка, которая волшебным образом сработала для меня (я не знаю почему), находится вSettings ->Editor ->File Encodings ->Project Encoding. Вам нужно установить это в "UTF-8".

Затем символы юникода правильно отображаются на консоли, и еще один быстрый просмотр отладчика показывает, что значениеSystem.out.textOut.out.se.cs волшебным образом превратился вUTF-8.

Я говорю «волшебно», потому что не понимаю, как и почему настройки редактора должны влиять на набор символов, которыйSystem.out запускается при запуске / отладке приложения. Если кто-то знает, в чем логика, пожалуйста, скажите!

@ MarkJeronimus ваши вопросительные знаки в штучной упаковке - это совсем не то, что обычные вопросительные знаки, и что они говорят о вашей консоли, так это то, что она отлично способна отображать юникод, поэтому ваша проблема может быть в другом мест Mike Nakis
2016.4: не работает. Все в UTF-8, включаяSystem.out.textOut.out.se.cs но в штучной упаковке я вижу знаки вопроса ( ). Mark Jeronimus
@ MarkJeronimus Я собирался попросить вас точно описать вашу ситуацию, но вам лучше начать новый вопрос. Возможно, вы захотите сделать ссылку на этот сайт, чтобы показать, что здесь у вас ничего не работает. Mike Nakis
0

что @Mike Nakis сказал в своем ответе, перейдя в Настройки и изменив кодировку проекта.

В моем случае мне пришлось сделать еще один шаг:

В правом нижнем углу кодировки переключателя IntelliJ IDEA для UTF-8

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

-1

роса появляется, когда у вас нет шрифтов для символов, которые вы выводите.

Кроме того, вы выводите, выполняя System.out.println ("")? Если это так, просто установка шрифтов должна работать.

Если вы пытаетесь написать в System.out из вашей программы, это не так. Вы должны использовать OutputStreamWriter, который является символьным потоком. Вы не можете просто записать в байтовый поток, такой как OutputStream.

Найдите API и ссылку на класс для OutputStreamWriter и подклассов, таких как PrintWriter. Вы создаете его, предоставляя локаль конструктора. Например

PrintWriter pw = new PrintWriter (System.out, "UTF-8");

Кодирование как UTF-8 полезно, только если приемник знает, как декодировать данные как UTF-8. Следование этому совету, как написано, скорее всего, приведет к еще большей путанице. McDowell
Вам всегда нужно знать кодировку для чтения данных, содержащих символы Юникода. В исходном вопросе указано «символы Юникода». Для меня это означает, что он может содержать произвольные символы из любого языка. Если вы хотите записать такие данные, они должны быть в кодировке, которая поддерживает ВСЕ такие возможные символы во входном наборе. Как еще вы предлагаете это сделать ???? rhimbo

Похожие вопросы