2010-11-11 9 views
18

Domyślne kodowanie moje okna jest GBK, a mój Eclipse jest całkowicie UTF-8.
Więc aplikacja, która działa dobrze w moim Eclipse, awarie, ponieważ słowa stają się nieczytelne, gdy eksportowany jako plik JAR;
muszę napisać następujący wiersz w pliku .bat, aby uruchomić aplikacjęJak zmusić słoik do korzystania (lub JVM że słoik przebiega) UTF-8 zamiast domyślnego kodowania systemu

start java -Dfile.encoding=utf-8 -jar xxx.jar  

Teraz moje pytanie jest to, że mogę napisać coś w kodzie źródłowym, aby ustawić zastosowań aplikacyjnych (lub JVM działa w) utf-8 zamiast domyślnego kodowania systemu.

+0

Podobne http://stackoverflow.com/questions/361975/setting-the-default- kodowanie znaków java –

Odpowiedz

15

Podczas otwierania pliku do odczytu, należy wyraźnie określić kodowanie, którego chcesz użyć do odczytu pliku:

Reader r = new InputStreamReader(new FileInputStream("myfile"), StandardCharsets.UTF_8); 

Następnie wartość kodowanie domyślne platformy (które można zmieniać za pomocą -Dfile.encoding) nie ma już znaczenia.

Uwaga:

I zwykle polecam zawsze określić kodowanie wyraźnie dla każdej operacji, która jest uzależniona od standardowej lokalizacji, takich jak znak I/O. Wiele metod Java API domyślnie stosuje kodowanie platformy, co uważam za zły projekt, ponieważ często kodowanie platformy nie jest właściwe, a ponadto może się nagle zmienić (jeśli użytkownik np. Zmienia ustawienia regionalne OS), łamiąc aplikację.

Więc po prostu powiedzieć, który zawsze kodowania chcesz.

Istnieją pewne przypadki, w których kodowanie platforma jest odpowiednia (jak podczas otwierania pliku użytkownik po prostu stworzony dla ciebie), ale są one dość rzadkie.

Uwaga 2:

java.nio.charset.StandardCharsets został wprowadzony w Javie 1.7. W starszych wersjach Javy musisz określić kodowanie wejściowe jako ciąg (ugh). Lista możliwych kodowań zależy od JVM, ale każda JVM ma co najmniej:

US-ASCII, ISO-8859-1, UTF-8, UTF-16BE, UTF-16LE, UTF-16.

+0

DZIĘKUJEMY! Zanim użyjemy '-Dfile.encoding', wypróbowałem 'nowy ciąg (bytes []," UTF8 ");' być może nie używa go wszędzie, więc nadal nie działa. Właśnie teraz spróbowałem ponownie i odniosłem sukces. – Aloong

+0

@Aloong: Cieszę się, że zadziałało. BTW, to "UTF-8", a nie "UTF8". – sleske

0

Jest inny sposób. Jeśli masz pewność, jak chcesz kodować dane wejściowe i wyjściowe, możesz zapisać ustawienia przed skompilowaniem pliku JAR.

Oto przykład dla NetBeans.

idź do projektu >> Właściwości >> Opcje >> VM Uruchom i wpisz -Dfile. encoding=UTF-8

Po tym, wszystko jest zakodowane w UTF-8 przy każdym uruchomieniu Java VM.

(myślę Eclipse oferuje te same możliwości. Jeśli nie, po prostu google do opcji VM.)

enter image description here

Powiązane problemy