Muszę użyć UTF-8 we właściwościach zasobów za pomocą Java ResourceBundle
. Kiedy wprowadzam tekst bezpośrednio do pliku właściwości, wyświetla się on jako mojibake.
Moja aplikacja działa na Google App Engine.
Czy ktoś może dać mi przykład? Nie mogę dostać tej pracy.
java.util.ResourceBundle
, a niejava.util.Properties
.Odpowiedzi:
Do
ResourceBundle#getBundle()
zastosowania pod kołdrąPropertyResourceBundle
, gdy.properties
plik jest określona. To z kolei domyślnie używaProperties#load(InputStream)
do ładowania tych plików właściwości. Zgodnie z javadoc są one domyślnie czytane jako ISO-8859-1.Musisz więc zapisać je jako ISO-8859-1. Jeśli masz jakieś znaki poza zakresem ISO-8859-1 i nie możesz użyć
\uXXXX
czubka głowy, a zatem jesteś zmuszony zapisać plik jako UTF-8, musisz użyć narzędzia native2ascii do konwersji Plik właściwości zapisanych w UTF-8 do pliku właściwości zapisanych w ISO-8859-1, w którym wszystkie odkryte znaki są konwertowane na\uXXXX
format. Poniższy przykład konwertuje plik właściwości zakodowany w UTF-8text_utf8.properties
na prawidłowy plik właściwości zakodowany w standardzie ISO-8859-1text.properties
.Gdy używasz rozsądnego IDE, takiego jak Eclipse, jest to już automatycznie wykonywane, gdy tworzysz
.properties
plik w projekcie opartym na Javie i używasz własnego edytora Eclipse. Eclipse w sposób przezroczysty konwertuje znaki spoza zakresu ISO-8859-1 na\uXXXX
format. Zobacz także poniższe zrzuty ekranu (zwróć uwagę na zakładki „Właściwości” i „Źródło” u dołu, kliknij, aby wyświetlić duże):Alternatywnie, możesz również utworzyć niestandardową
ResourceBundle.Control
implementację, w której bezpośrednio odczytujesz pliki właściwości jako UTF-8InputStreamReader
, dzięki czemu możesz po prostu zapisać je jako UTF-8 bez konieczności kłopotania sięnative2ascii
. Oto przykład:Można to wykorzystać w następujący sposób:
Zobacz też:
źródło
StandardCharsets.UTF_8
jeśli używasz Java 7+Biorąc pod uwagę, że masz instancję ResourceBundle i możesz uzyskać ciąg znaków przez:
Rozwiązałem mój japoński problem z wyświetlaniem poprzez:
źródło
Spójrz na to : http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#load(java.io.Reader)
właściwości akceptują Czytnika obiekt jako argumenty, które można utworzyć z InputStream.
w czasie tworzenia możesz określić kodowanie Czytnika:
następnie zastosuj ten czytnik do metody ładowania:
BTW: pobierz strumień z pliku .properties :
BTW: pobierz pakiet zasobów od
InputStreamReader
:mam nadzieję, że to może ci pomóc!
źródło
ResourceBundle
.Properties
i chcesz odzyskaćUTF-8
String, to działa jak urok. Jednak w przypadkuResourceBundle
takich zasobów językowych akceptowana odpowiedź jest elegancka. Niemniej jednak głosował odpowiedź.ResourceBundle rb = new PropertyResourceBundle(new InputStreamReader(stream, "UTF-8"))
ResourceBundle.Control
z UTF-8 i nowymi metodami String nie działają, jeśli na przykład plik właściwości używa zestawu znaków cp1251.Dlatego polecam, używając wspólnej metody: pisz w symbolach Unicode . Dla tego:
IDEA - posiada specjalną opcję „ Przezroczysta konwersja natywnego na ASCII ” (Ustawienia> Kodowanie pliku).
Eclipse - ma wtyczkę „ Edytor właściwości ” . Może działać jako osobna aplikacja.
źródło
Ten problem został wreszcie rozwiązany w Javie 9: https://docs.oracle.com/javase/9/intl/internationalization-enhancements-jdk-9
Domyślne kodowanie plików właściwości to teraz UTF-8.
źródło
Tworzymy plik resources.utf8, który zawiera zasoby w UTF-8 i mamy regułę do uruchamiania następujących czynności:
źródło
native2ascii
? Właśnie to zrobiłemfind / -name native2ascii*
i nie otrzymałem żadnych wyników, więc zakładam, że to nie tylko część JDK ...jdk1.*.0_*/bin
.źródło
Uwaga: pliki właściwości java powinny być zakodowane w ISO 8859-1!
@ patrz Właściwości Java Doc
Jeśli nadal naprawdę chcesz to zrobić: spójrz na: Właściwości Java Kodowanie UTF-8 w Eclipse - istnieje kilka przykładów kodu
źródło
http://sourceforge.net/projects/eclipse-rbe/
jak już wspomniano, pliki właściwości powinny być zakodowane w ISO 8859-1
Możesz użyć powyższej wtyczki dla środowiska IDE Eclipse, aby wykonać dla Ciebie konwersję Unicode.
źródło
Oto rozwiązanie Java 7, które wykorzystuje doskonałą bibliotekę wsparcia Guava i konstrukcję try-with-resources. Odczytuje i zapisuje pliki właściwości za pomocą UTF-8 dla najprostszego ogólnego doświadczenia.
Aby odczytać plik właściwości jako UTF-8:
Aby zapisać plik właściwości jako UTF-8:
źródło
Jak sugerowano, przeszedłem implementację pakietu zasobów ... ale to nie pomogło .. ponieważ pakiet zawsze był wywoływany w ustawieniach regionalnych en_US ... próbowałem ustawić moje domyślne ustawienia regionalne na inny język, a mimo to moją implementację pakietu zasobów kontrola była wywoływana za pomocą en_US ... próbowałem umieścić komunikaty w dzienniku i zrobić krok przez debugowanie i sprawdzić, czy po zmianie ustawień regionalnych w czasie wykonywania przez xhtml i JSF wykonano inne lokalne połączenie ... to się nie stało ... potem próbowałem zrobić zestaw systemowy ustawiony domyślnie na utf8 do odczytu plików przez mój serwer (serwer tomcat) .. ale to spowodowało zaimek, ponieważ wszystkie moje biblioteki klas nie zostały skompilowane pod utf8 i tomcat zaczął czytać w formacie utf8 a serwer nie działał poprawnie ... skończyłem z implementacją metody w moim kontrolerze Java, która ma być wywoływana z plików xhtml ..w tej metodzie wykonałem następujące czynności:
Byłem szczególnie zdenerwowany, ponieważ może to spowolnić działanie mojej aplikacji ... jednak po jej wdrożeniu wygląda to tak, jakby moja aplikacja była teraz szybsza. Myślę, że dzieje się tak, ponieważ teraz bezpośrednio uzyskuję dostęp do właściwości, a nie pozwalam JSF analizuje sposób uzyskiwania dostępu do właściwości ... w tym wywołaniu przekazuję argument boolowski, ponieważ wiem, że niektóre właściwości nie zostałyby przetłumaczone i nie muszą być w formacie utf8 ...
Teraz zapisałem plik właściwości w formacie UTF8 i działa dobrze, ponieważ każdy użytkownik w mojej aplikacji ma preferencyjne ustawienia regionalne.
źródło
źródło
Warto zwrócić uwagę na to, że same pliki miały niewłaściwe kodowanie. Korzystanie z iconv działało dla mnie
źródło
iconv
. Nigdy wcześniej o nim nie słyszałem, ale wpisałem go w konsoli i oto, oto rzecz, która istnieje (w każdym razie w CentOS 6).Próbowałem zastosować podejście dostarczone przez Rod, ale biorąc pod uwagę obawy BalusC o to, że nie powtarza się tego samego obejścia we wszystkich aplikacjach, otrzymałem tę klasę:
Sposób użycia tego byłby bardzo podobny do zwykłego użycia ResourceBundle:
Lub możesz użyć alternatywnego konstruktora, który domyślnie używa UTF-8:
źródło
Otwórz okno dialogowe Ustawienia / Preferencje ( Ctrl+ Alt+ S), a następnie kliknij opcję Edytor i kodowanie plików.
Następnie na dole wskażesz domyślne kodowanie plików właściwości. Wybierz typ kodowania.
Alternatywnie możesz użyć symboli Unicode zamiast tekstu w pakiecie zasobów (na przykład
"ів"
równa się\u0456\u0432
)źródło
W Javie 9 domyślny plik właściwości ładowania został zmieniony na UTF-8. https://docs.oracle.com/javase/9/intl/internationalization-enhancements-jdk-9.htm
źródło