2011-01-10 10 views
6

Chcę napisać „arabski” w wiązce wiadomość zasobów (właściwości) plik, ale gdy próbuję go zapisać otrzymuję ten błąd:Java: Jak napisać "arabski" w pliku właściwości?

„Zapisz mogła nie zostać zakończona Niektóre znaki nie mogą być odwzorowywane z wykorzystaniem” ISO -85591-1 "Kodowanie znaków. Zmień kodowanie lub usuń znak ..."

Czy ktokolwiek poprowadzi Cię proszę?

chcę napisać:

global.username = اسم المستخدم

Jak mam napisać arabski "username" w pliku właściwości? Tak, że umiędzynarodowienie działa ..

BR SC

Odpowiedz

5

Jak opisano w odniesieniu do klasy "Właściwości"

The load(Reader)/store(Writer, String) methods load and store properties from and to a character based stream in a simple line-oriented format specified below. The load(InputStream)/store(OutputStream, String) methods work the same way as the load(Reader)/store(Writer, String) pair, except the input/output stream is encoded in ISO 8859-1 character encoding. Characters that cannot be directly represented in this encoding can be written using Unicode escapes ; only a single 'u' character is allowed in an escape sequence. The native2ascii tool can be used to convert property files to and from other character encodings.

0

Jeśli używasz Eclipse, można wybrać „Window -> Preferences ", a następnie filtrować" typy zawartości ". Wtedy powinieneś być w stanie ustawić domyślne kodowanie. Jest zrzut ekranu pokazujący to na górze this post.

+0

Jak to ma pomóc? – jarnbjo

+1

W ten sposób ustawiam kodowanie pliku właściwości, gdy napotkałem ten sam komunikat o błędzie podczas próby wykonania czegoś podobnego. – smcmahon

4

Właściwości oparte zasobu wiązki muszą być zakodowane w ISO-8859-1, aby użyć domyślnego mechanizmu ładowania, ale z powodzeniem stosowany ten kod, aby umożliwić pliki właściwości mają być zakodowane w UTF-8:

private static class ResourceControl extends ResourceBundle.Control { 
    @Override 
    public ResourceBundle newBundle(String baseName, Locale locale, 
      String format, ClassLoader loader, boolean reload) 
      throws IllegalAccessException, InstantiationException, 
      IOException { 
     String bundlename = toBundleName(baseName, locale); 
     String resName = toResourceName(bundlename, "properties"); 
     InputStream stream = loader.getResourceAsStream(resName); 
     return new PropertyResourceBundle(new InputStreamReader(stream, 
       "UTF-8")); 
    } 

} 

Potem oczywiście trzeba zmienić kodowanie samego pliku na UTF-8 w IDE, i można go używać tak:

ResourceBundle bundle = ResourceBundle.getBundle(
    "package.Bundle", new ResourceControl()); 
+0

Dzięki, ale mówię o edytorze, który może zapisać tekst napisany w języku arabskim. – SmoothCriminel

+0

@SmoothCriminel: i mówię wam, że edytor nie jest głównym problemem: każdy przyzwoity edytor tekstu pozwoli ci wybrać kodowanie (jak mówi komunikat o błędzie). Ale to ci nie pomoże, gdy klasa MessageBundle będzie nalegać na interpretację pliku w ISO-8859-1 –

+0

OK fajne podziękowania. Mam to teraz !!! – SmoothCriminel

0

jest to głównie kwestia konfiguracji edytora. Jeśli pracujesz w systemie Windows, możesz edytować tekst w edytorze obsługującym kodowanie UTF-8. Wbudowany edytor Notepad lub Eclipse powinien wystarczyć, pod warunkiem, że zapisałeś plik jako UTF-8. W Linuksie z powodzeniem używam gedit i emacs. W Notatniku możesz to zrobić, klikając przycisk "Zapisz jako" i wybierając kodowanie "UTF-8". Inni redaktorzy powinni mieć podobną funkcję. Niektóre edytory mogą wymagać zmiany czcionki w celu poprawnego wyświetlania liter, ale wydaje się, że nie masz tego problemu.

Powiedziawszy to, należy wziąć pod uwagę inne kroki podczas wykonywania i18n dla języka arabskiego. Poniżej znajdziesz przydatne linki. Upewnij się, że użyłeś native2ascii na pliku właściwości, zanim go użyjesz, w przeciwnym razie może nie działać. Spędziłem dużo czasu, dopóki nie wymyśliłem tego.

Tomcat webapps

Using nativ2ascii with properties files

1

new String(ret.getBytes("ISO-8859-1"), "UTF-8"); pracował dla mnie. plik właściwości zapisany w kodowaniu ISO-8859-1.