2013-05-22 12 views
23

Chciałbym przeprosić z góry za moją niesamowitą nowość w odniesieniu do Java i programowania w ogóle. Ale szukałem wszędzie odpowiedzi, a ja po prostu nie mogę jej znaleźć.Nie mogę zrozumieć, dlaczego DrJava nie wypuszcza symboli Unicode

Więc jestem po prostu próbuje uruchomić następujące:

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 znaków \ ​​u2261 jest znakiem kongruencja (≡). DrJava pokazuje odpowiednio następujące wyjścia:

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 

Co najdziwniejsze jest to, że kiedy wystarczy wpisać

'\u2261' 

w polu oddziaływań, pojawia się znak równoważności apostrofami:

'≡' 

Próbowałem po prostu wstawiania "\ u2261" w kodzie zamiast "\ u2261", ale potem otrzymuję takie rzeczy:

8803 modulo 7 
8805 modulo 7 
8807 modulo 7 

Próbowałem także po prostu wstawiając kod Unicode do kodu, ale to właśnie dało komunikat o błędzie. Czy ktoś może dowiedzieć się, co się dzieje lub co robię źle? Twoja pomoc jest bardzo ceniona.

[Powinienem dodać, że to nie jest zadanie domowe lub cokolwiek, ponieważ nasza książka prawie nie wspomina o Unicode - po prostu próbując to zrozumieć ... i kiedy zaczynałem, nie myślałem, że to będzie to mocno!]

EDYCJA: Używam Mac OS 10.7.5 i Dr Java mówi, że jego kompilacja to "drjava-20120818-r5686".

EDYCJA # 2: Oto zrzut ekranu z użyciem czcionki Monospaced 12 jako głównej czcionki. Nadal wyświetla się jako znaki zapytania, mimo że mogę przekonać konsolę, by zwróciła mi ten symbol, jeśli wpiszę go bezpośrednio, ale z pojedynczymi cudzysłowami.

enter image description here

+0

to działa na mnie bez problemu, gdy sprawdziłem w Eclipse. Nie ma drjava ... – Thihara

+2

** nie działa dla mnie, gdy sprawdziłem zaćmienie. Również nie masz drjava; nie jesteś sam: S – Craig

+3

Być może czcionka użyta w twoim systemie nie ma glifu dla tej postaci? –

Odpowiedz

0

Czy zmieniłeś zachęty do wyjścia w Unicode. (Nota domyślne Java w świecie English speaking jest IS0-8859-1).

+0

Nie jestem pewien, co masz na myśli. Czy pytasz o to w oknie konsoli Dr Java? Sprawdziłem we wszystkich menu i nie znalazłem wzmianki o Unicode. Wydaje się, że tak prosta ... –

8

Problem związany jest z czcionką, której używasz, nie stanowi to problemu z kodem. Zobacz ustawienia DrJava pod numerem Edit > Preferences > Display Options > Fonts > Main Font.

DrJava stosując domyślne czcionki (stałej szerokości 12) Linux: DrJava on Linux with "Main Font" set to default (Monospaced 12)

DrJava pomocą innego czcionki (PT Sans 12) Linux: DrJava on Linux with "Main Font" set to "PT Sans 12"

Oba ekranu pochodzą z tego samego wystąpienia DrJava; Nawet nie musiałem go zamykać. Zauważ, że w okienku Interakcje glif jest poprawny dla mojej czcionki Monospaced i jest generycznym symbolem zastępczym dla PT Sans. To samo dzieje się w zakładce Console (nie pokazano).

+1

Określona czcionka o stałej szerokości to DejaVu Sans Mono. –

+0

Dziękuję za odpowiedź. Miało to sens i pomyślałem, że to zadziała, ale niestety, kiedy zmieniłem czcionkę na Monospaced 12, nadal mam znaki zapytania zamiast symboli kongruencji. Teraz naprawdę nie jestem pewien, co się dzieje ... –

+0

(Dodałem zrzut ekranu do mojego oryginalnego wpisu.) –

2

Zrobiłem badania bitowej i znalazłem rozwiązanie, które zostało znalezione wcześniej z innym pytaniem here

Więc w tym przypadku, to może być coś podobnego. Naprawdę nie twój kod, ale sposób, w jaki DrJava obsługuje unicode w zależności od twojego systemu.

"Kodowanie znaków zależy od systemu, w zależności od skrzynki może wydrukować 16 bitów kodowania UTF-16 (czyli 9794), 8 bitów wysokiego poziomu (co daje 38) lub Twoja sprawa, niskie 8 bitów (czyli 66).

9794/256 = 38 
9794 % 256 = 66 

"

Powiązane problemy