2015-03-07 14 views
5

Potrzebuję odczytać dane wejściowe od użytkownika i chcę mieć wsparcie dla liter niełacińskich, takich jak Å, Ę i Ö.Odczytywanie z klawiatury w UTF-8

BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in)); 
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out, "UTF-8"), true); 
out.println(keyboard.readLine()); 
out.println("Read with charset: " + Charset.defaultCharset().name()); 

Kiedy uruchomić ten kod, a wejście łacińskie się, że działa zgodnie z oczekiwaniami (I wprowadzić coś, naciśnij enter i wypisuje co wszedłem). Ale gdy próbuję z dostaję to:

å 

� 
Read with charset: UTF-8 

muszę nacisnąć enter dwa razy, jeśli tekst kończy się niełacińskie literę, a następnie ich nie wyświetlać rację. Próbowałem tego w konsoli Netbeans i w wierszu polecenia systemu Windows, a żadne nie daje oczekiwanych rezultatów.


Nie mogłem znaleźć rozwiązania z UTF-8, ale zamiast niego skorzystałem z ISO-8859-1. To działało z moją konsolą Netbeans (która zdecydowanie powinna być UTF-8) oraz w CMD, kiedy po raz pierwszy uruchomiłem chcp 28591, zmieniłem czcionkę (było to konieczne w moim przypadku) i uruchomiłem mój program.

+0

http://stackoverflow.com/questions/4597749/read-write-txt-file- with-special-charples i http://stackoverflow.com/questions/9281629/read-special-characters-in-java -with-bufferedreader – crAlexander

+0

To działa dla mnie. Twoja konsola musi być skonfigurowana tak, aby nie wyświetlać poprawnie UTF-8. – RealSkeptic

+0

@RealSkeptic, mogę wydrukować znaki inne niż łacińskie, bez problemu (Sys.out.print ("å")). Działa to dobrze zarówno w konsoli Netbeans, jak iw CMD. Ale kiedy próbuję czytać znaki, pojawia się problem (jak również, że trzeba nacisnąć dwukrotnie klawisz enter, gdy tekst kończy się na å ä lub ö). –

Odpowiedz

0

Czy próbowałeś:

BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in,"UTF-8")); 

Jeśli to nie działa, spróbuj przeczytaniu surowy strumień bajtów następnie konwersja do new String(bytes,"UTF-8")

+0

Jeśli nie określisz zestawu znaków, otrzyma on kod domyślny (w moim przypadku kod UTF-8, jak widać na moim pytaniu). Próbowałem twojej drugiej sugestii, czytając surowe bajty, ale bez powodzenia. Znalazłem obejście (zamiast tego użyłem ISO-8859-1). –

+0

Nie mogę uwierzyć, że używa ISO-8859-1, a nie UTF-8. Wydaje mi się, że UTF-8 był w dzisiejszych czasach dość standardowy, ale może nie. –

1

próbka kodu nie jest kodującego właściwie w dowolny sposób. Odczytuje dane z konsoli przy użyciu domyślnego systemu, a następnie zapisuje je za pomocą UTF-8. Domyślnym ustawieniem systemowym może nie być UTF-8, a komplikacja może sprawić, że konsola może być lub nie być identyczna z domyślną.

Aby zrobić to poprawnie w konsoli, należy przeczytać kodowanie za pomocą konsoli i wypisać za pomocą kodowania konsoli. Jeśli tylko testujesz to i musisz napisać do pliku, na przykład, zapisz go jako UTF-8 i upewnij się, że otworzysz go za pomocą edytora tekstowego jako UTF-8.

+0

Konsola NetBeans ma UTF-8, chyba że wystąpił błąd związany z Netbeans. Znalazłem jednak obejście (sprawdź moje zaktualizowane pytanie). –