символы юникода отображаются в консоли 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) Файл | Настройки | Редактор > Кодировки Файлов . Нажмите на ссылку ниже, чтобы увидеть настройки изображения
У вас есть соответствующие шрифты, установленные на вашей машине? Вопросительный знак появляется, когда у вас нет шрифтов для символов, которые вы выводите.
кроме того, вы выводите, делая систему.из.println ("")? Если это так, просто установка шрифтов должна работать.
Если вы пытаетесь написать в системе.вне вашей программы это совсем другое. Вы должны использовать OutputStreamWriter, который является символьным потоком. Вы не можете просто писать в байт-ориентированный поток, такой как OutputStream.
найдите ссылку API и класса для OutputStreamWriter и подклассов, таких как PrintWriter. Вы создаете его, давая локаль конструктора. Например,
PrintWriter pw = новый PrintWriter(система.out, "UTF-8");