символы юникода отображаются в консоли IntelliJ IDEA как вопросительные знаки

Я пытаюсь написать символы юникода ( ♠ ) с помощью системы.и вопросительный знак вместо печати.

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

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

6 ответов


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


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

TL; DR ответ:

на Settings ->Editor ->File Encodings ->Project Encoding и установите его в "UTF-8".

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

причина, по которой он не работает, может быть найдена путем размещения точки останова на System.out.print() звонок. Когда точка останова попадает, вы можете добавить System.out to 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 получает экземпляр при запуске / отладке приложения. Если кто-то знает, какова логика этого, пожалуйста, скажите!


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


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

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

Intellij 2017.3.1 (Издание Сообщества)


У вас есть соответствующие шрифты, установленные на вашей машине? Вопросительный знак появляется, когда у вас нет шрифтов для символов, которые вы выводите.

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

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

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

PrintWriter pw = новый PrintWriter(система.out, "UTF-8");