2013-05-22 2 views
23

Я хотел бы извиниться перед своей невероятной новинкой в ​​отношении Java и программирования в целом. Но я искал всюду для ответа на это, и я просто не могу найти его.Я не могу понять, почему DrJava не выводит символы Unicode

Так что я просто пытаюсь запустить следующее:

public class WriteSquares2 
{ 
    public static void main(String[] args) 
    { 
    for (int i=1; i<=10; i++) 
    { 
     System.out.println(i + " \u2261 " + (i % 7) + " modulo 7"); 
    } 
    } 
} 

Unicode, символ \ u2261 является конгруэнтность знак (≡). DrJava показывает следующее в качестве вывода:

1 ? 1 modulo 7 
2 ? 2 modulo 7 
3 ? 3 modulo 7 
4 ? 4 modulo 7 
5 ? 5 modulo 7 
6 ? 6 modulo 7 
7 ? 0 modulo 7 
8 ? 1 modulo 7 
9 ? 2 modulo 7 
10 ? 3 modulo 7 

Что самое странное в этом то, что, когда я просто введите

'\u2261' 

в поле взаимодействий, я получаю характер эквивалентности в одинарные кавычки:

'≡' 

Я пробовал просто поставить «\ u2261» в коде вместо «\ u2261», но потом я получаю такие вещи:

8803 modulo 7 
8805 modulo 7 
8807 modulo 7 

Я также пробовал просто вставить символ Юникода в код, но это только что дало сообщение об ошибке. Кто-нибудь может понять, что происходит или что я делаю неправильно? Ваша помощь очень ценится.

[Я должен добавить, что это не домашнее задание или что-то еще, так как наша книга едва упоминает Юникод - просто пытается понять это ... и когда я начал, я не думал, что это будет hard!]

EDIT: Я использую Mac OS 10.7.5, а Dr Java говорит, что его сборка «drjava-20120818-r5686».

EDIT # 2: Вот скриншот с использованием Monospaced 12 в качестве основного шрифта. Он по-прежнему отображается как вопросительные знаки, хотя я могу заставить консоль вернуть мне символ, если я ввожу его напрямую, но с одинарными кавычками.

enter image description here

+0

это работает для меня без проблем, когда я проверил в затмении. У меня нет drjava .... – Thihara

+2

Это не работает ** для меня, когда я проверил в затмении. Также нет drjava; вы не одиноки: S – Craig

+3

Возможно, шрифт, используемый в вашей системе, не имеет глифа для этого символа? –

ответ

0

Вы изменили свой запрос на выход в юникоде. (Обратите внимание на Java по умолчанию в английском говорящем мире является IS0-8859-1).

+0

Я не уверен, что вы имеете в виду. По подсказке, вы имеете в виду в окне консоли Dr Java? Я просмотрел все меню и не нашел упоминания о Юникоде. Кажется, такая простая вещь ... –

8

Проблема связана с шрифтом, который вы используете, это не проблема с вашим кодом. См. Настройки DrJava под номером Edit > Preferences > Display Options > Fonts > Main Font.

DrJava шрифта, используя по умолчанию (моноширинный 12) на Linux: DrJava on Linux with "Main Font" set to default (Monospaced 12)

DrJava с использованием другого шрифта (PT Sans 12) на Linux: DrJava on Linux with "Main Font" set to "PT Sans 12"

Обе скриншоты из одного экземпляра DrJava; Мне даже не пришлось закрывать его. Обратите внимание, что на панели «Взаимодействия» глиф правильный для моего моноширинного шрифта и является общим заполнителем для PT Sans. То же самое происходит на вкладке Консоль (не показана).

+1

Конкретный моноширинный шрифт - DejaVu Sans Mono. –

+0

Благодарим вас за ответ. Это имело смысл для меня, и я думал, что это сработает, но, к сожалению, когда я изменил шрифт на Monospaced 12, у меня все еще есть вопросительные знаки вместо символов конгруэнтности. Теперь я действительно не уверен, что происходит ... –

+0

(Я добавил скриншот к своему оригинальному сообщению.) –

2

Я сделал немного исследований, и я нашел решение, которое было найдено раньше от другого вопроса here

Таким образом, в этом случае, это может быть что-то подобное. Не совсем ваш код, но способ, которым DrJava обрабатывает unicode в зависимости от вашей системы.

Кодировка символов зависит от системы. В зависимости от вашего поля он может печатать 16 бит кодировки UTF-16 (что составляет 9794), высокие 8 бит (это должно быть 38) или, как в ваш случай, то младшие 8 бит (который 66).

9794/256 = 38 
9794 % 256 = 66 

"

Смежные вопросы