Hirdetés

Új hozzászólás Aktív témák

  • Blip
    csendes tag

    Sziasztok! A múltkor belefutottam egy Java problémába, gondoltam megkérdezem.

    Van egy programunk, ahol a GUI elemek szövegei (a label-ek és a gombok feliratai, a combobox-ok elemei, stb.) nem a programba vannak hardcode-olva, hanem futásidőben kerülnek beolvasásra egy szövegfájlból. A program egy magyar (nem tudom, fontos-e) Win7-en készült, a szövegfájl sima ANSI kódolású és minden tökéletesen működött, még a kritikus ő és ű karakterek is ékezethelyesek voltak. Amikor azokban kipróbáltuk egy Ubuntu Linuxon, az ékezetes karakterek (nem csak ő és ű, hanem az összes) hibásan jelentek meg. Hirtelen ötlettől vezérelve átkonvertáltuk a szövegfájlt UTF8 kódolásúra (BOM nélkül), amitől a dolgok szépen megjavultak és a szoftver rendesen működött.

    Egészen addig, amíg ezt a változatot vissza nem hoztuk Win7-re: az ékezetes karakterek helyett itt annak a két byte-nak az ANSI megfelelője jelent meg, ami az UTF8-ben őket leírja.

    Gondoltam a Look&Feel-re, de nehezen tudom elképzelni, hogy az NT óta unicode-ra épülő windows-os L&F ANSI alapú lenne, míg a linuxos unicode-os...

    Valami ötlet?

    A java API-k néhol a platform default encoding-ját használják. Lehet, hogy ez a konkrét Win7 és Ubuntu példány esetén különbözik, és ez a gond oka.

    Egy konkrét példa: new FileReader(fileName); // default encodingot használ

    Helyette jobb: new InputStreamReader(new FileInputStream(fileName), "UTF-8")

    Ha tudod módosítani a forrást, akkor ilyesmit keressél és javítsál benne. Ha a java kód nem elérhető, akkor esetleg a java indító parancssorában próbálkozhatsz a -Dfile.encoding=UTF-8 opcióval.

Új hozzászólás Aktív témák