java in locale
|
Stevie Jabuk
Pridružen/a: 23.07.2007 |
Prispevkov: 609 |
Kraj: 1 Infinite Loop |
|
![Moški Moški](templates/AquaSoft/images/gender_m.gif) |
|
Prispevek: #1 Objavljeno 22.02.2012 14:08:09 java in locale |
|
Živjo,
pri debugiranju neke java aplikacije sem naletel na zanimiv problem z locale/unicode na osx.
Če na OSX Lion z ukazom native2asci preverim npr. črko "č" dobim kodo dveh znakov (kar je narobe):
Koda: | $ native2ascii
č
\u0192\u00e7 |
isti ukaz na linux boxu vrne (pravilno) tole:
Koda: | # native2ascii
č
\u010d |
V čem je finta?
LP
|
![](templates/AquaSoft/images/post_sep.gif) |
Stevie Jobs
Pridružen/a: 14.09.2008 |
Prispevkov: 3287 |
Kraj: Ljubljana |
|
![Ni navedeno Ni navedeno](templates/AquaSoft/images/gender_x.gif) |
|
Prispevek: #2 Objavljeno 22.02.2012 15:24:42 Re: java in locale |
|
Pomoje prebereš fajl v napačnem encodingu na osx...
|
![](templates/AquaSoft/images/post_sep.gif) |
Stevie Jabuk
Pridružen/a: 23.07.2007 |
Prispevkov: 609 |
Kraj: 1 Infinite Loop |
|
![Moški Moški](templates/AquaSoft/images/gender_m.gif) |
|
Prispevek: #3 Objavljeno 22.02.2012 15:36:31 Re: java in locale |
|
alenbec je napisal/a: | Pomoje prebereš fajl v napačnem encodingu na osx... |
fajl, kakšen fajl?
native2ascii pretvori to kar vtipkaš direkt s tipkovnice.
|
![](templates/AquaSoft/images/post_sep.gif) |
Stevie Jabuk
Pridružen/a: 21.01.2008 |
Prispevkov: 384 |
Kraj: Ravne na Koroškem |
|
![Moški Moški](templates/AquaSoft/images/gender_m.gif) |
|
Prispevek: #4 Objavljeno 22.02.2012 17:48:40 Re: java in locale |
|
verjetno ti počneš v terminalu?... poglej kakšen encoding imaš naštiman... tvoj osx rezultat mi zgleda kot utf16...
LP
|
![](templates/AquaSoft/images/post_sep.gif) |
Stevie Jabuk
Pridružen/a: 23.07.2007 |
Prispevkov: 609 |
Kraj: 1 Infinite Loop |
|
![Moški Moški](templates/AquaSoft/images/gender_m.gif) |
|
Prispevek: #5 Objavljeno 22.02.2012 20:41:27 Re: java in locale |
|
nayreth je napisal/a: | verjetno ti počneš v terminalu?... poglej kakšen encoding imaš naštiman... tvoj osx rezultat mi zgleda kot utf16...
LP |
sem tudi jaz najprej pomisli na utf16, samo glede na rezultate, ki sem jih dobil z online konverterji, to ni to.
Locale imam na osx nastavljeno takole:
Koda: | $ locale
LANG="sl_SI.UTF-8"
LC_COLLATE="sl_SI.UTF-8"
LC_CTYPE="sl_SI.UTF-8"
LC_MESSAGES="sl_SI.UTF-8"
LC_MONETARY="sl_SI.UTF-8"
LC_NUMERIC="sl_SI.UTF-8"
LC_TIME="sl_SI.UTF-8"
LC_ALL=
|
na linux boxu pa takole:
Koda: | # locale
LANG=sl_SI.UTF-8
LC_CTYPE="sl_SI.UTF-8"
LC_NUMERIC="sl_SI.UTF-8"
LC_TIME="sl_SI.UTF-8"
LC_COLLATE="sl_SI.UTF-8"
LC_MONETARY="sl_SI.UTF-8"
LC_MESSAGES="sl_SI.UTF-8"
LC_PAPER="sl_SI.UTF-8"
LC_NAME="sl_SI.UTF-8"
LC_ADDRESS="sl_SI.UTF-8"
LC_TELEPHONE="sl_SI.UTF-8"
LC_MEASUREMENT="sl_SI.UTF-8"
LC_IDENTIFICATION="sl_SI.UTF-8"
LC_ALL= |
Koda \u0192\u00e7 izpiše nekaj čisto drugega:
![](http://shrani.si/f/2r/P6/3s9IM70d/screen-shot-2012-02-22-a.png)
|
![](templates/AquaSoft/images/post_sep.gif) |
Stevie Jobs
Pridružen/a: 14.09.2008 |
Prispevkov: 3287 |
Kraj: Ljubljana |
|
![Ni navedeno Ni navedeno](templates/AquaSoft/images/gender_x.gif) |
|
Prispevek: #6 Objavljeno 22.02.2012 22:50:28 Re: java in locale |
|
benzoo je napisal/a: | fajl, kakšen fajl?
native2ascii pretvori to kar vtipkaš direkt s tipkovnice. |
Opis native2ascii v dokumentaciji
Citiram: | The Java compiler and other Java tools can only process files which contain Latin-1 and/or Unicode-encoded (\udddd notation) characters. native2ascii converts files which contain other character encodings into files containing Latin-1 and/or Unicode-encoded charaters. |
Torej lahko orodje pretvori vhod v ustrezen izhod, oba pa podaš kot parametra. Je pa tudi ta opcija, da vtipkaš direktno v konzolo znake in ti jih pretvarja.
Kakorkoli..
Terminal -> Preferences -> tab Advanced -> nastavi "Character Encoding" na "Central European (ISO Latin 2)" in bo delalo.
|
![](templates/AquaSoft/images/post_sep.gif) |
Stevie Jabuk
Pridružen/a: 23.07.2007 |
Prispevkov: 609 |
Kraj: 1 Infinite Loop |
|
![Moški Moški](templates/AquaSoft/images/gender_m.gif) |
|
Prispevek: #7 Objavljeno 22.02.2012 23:03:59 Re: java in locale |
|
alenbec je napisal/a: | Torej lahko orodje pretvori vhod v ustrezen izhod, oba pa podaš kot parametra. Je pa tudi ta opcija, da vtipkaš direktno v konzolo znake in ti jih pretvarja.
Kakorkoli..
Terminal -> Preferences -> tab Advanced -> nastavi "Character Encoding" na "Central European (ISO Latin 2)" in bo delalo. |
Ja vem kaj počne native2ascii. Ampak mene zanima, zakaj ne vrne unicode (utf8) niza pravilno. Če bom spremenil encoding terminala, potem ta sploh ne bo handlal utf8 ampak nekaj drugega, npr. latin2 in bo seveda tudi output drugačen (ne utf8).
konkretno č v utf8 je É v latin2.
|
![](templates/AquaSoft/images/post_sep.gif) |
Stevie Jobs
Pridružen/a: 14.09.2008 |
Prispevkov: 3287 |
Kraj: Ljubljana |
|
![Ni navedeno Ni navedeno](templates/AquaSoft/images/gender_x.gif) |
|
Prispevek: #8 Objavljeno 22.02.2012 23:11:35 Re: java in locale |
|
Druga opcija je, da uporabiš native2ascii z encoding parametrom
Koda: | native2ascii -encoding utf8 |
|
![](templates/AquaSoft/images/post_sep.gif) |
Stevie Jabuk
Pridružen/a: 23.07.2007 |
Prispevkov: 609 |
Kraj: 1 Infinite Loop |
|
![Moški Moški](templates/AquaSoft/images/gender_m.gif) |
|
Prispevek: #9 Objavljeno 22.02.2012 23:17:16 Re: java in locale |
|
alenbec je napisal/a: | Druga opcija je, da uporabiš native2ascii z encoding parametrom
Koda: | native2ascii -encoding utf8 |
|
Res je, to deluje, vendar moraš ročno forcat. Vendar jaz z native2ascii preizkušam, kakšen izpis dobim na podlagi environment variabel, saj kasneje java aplikaciji takega forcanja encodinga ne morem nastavit.
|
![](templates/AquaSoft/images/post_sep.gif) |
Stevie Jobs
Pridružen/a: 14.09.2008 |
Prispevkov: 3287 |
Kraj: Ljubljana |
|
![Ni navedeno Ni navedeno](templates/AquaSoft/images/gender_x.gif) |
|
Prispevek: #10 Objavljeno 22.02.2012 23:23:52 Re: java in locale |
|
Citiram: | -encoding encoding_name
Specify the encoding name which is used by the conversion procedure. The default encoding is taken from System property file.encoding. |
Ta property lahko tud spremeniš v izvajanju, če se ne motim. Drugače ti ne znam pomagat, žal
EDIT: ne gre spemenit. Lahko pa tako ugotoviš, kateri encoding uporablja trenutni JVM.. Nazadnje urejal/a alenbec Sre 22. Feb 2012 23:26; skupaj popravljeno 1 krat
|
![](templates/AquaSoft/images/post_sep.gif) |
Stevie Jabuk
Pridružen/a: 23.07.2007 |
Prispevkov: 609 |
Kraj: 1 Infinite Loop |
|
![Moški Moški](templates/AquaSoft/images/gender_m.gif) |
|
Prispevek: #11 Objavljeno 22.02.2012 23:25:48 Re: java in locale |
|
alenbec je napisal/a: | Citiram: | -encoding encoding_name
Specify the encoding name which is used by the conversion procedure. The default encoding is taken from System property file.encoding. |
Ta property lahko tud spremeniš v izvajanju, če se ne motim. Drugače ti ne znam pomagat, žal ![Smile](images/smiles/icon_smile.gif) |
To poznam, ampak v praksi je hecno, da ista aplikacija na linuxu/windowsih deluje s šumniki brez težav (brez da bi bilo potrebno karkoli dodatnega nastavljat/forcat), na osx pa noče. grr ![Sad](images/smiles/icon_sad.gif)
|
![](templates/AquaSoft/images/post_sep.gif) |
Stevie Jabuk
Pridružen/a: 21.01.2008 |
Prispevkov: 384 |
Kraj: Ravne na Koroškem |
|
![Moški Moški](templates/AquaSoft/images/gender_m.gif) |
|
Prispevek: #12 Objavljeno 23.02.2012 07:57:21 Re: java in locale |
|
benzoo je napisal/a: | To poznam, ampak v praksi je hecno, da ista aplikacija na linuxu/windowsih deluje s šumniki brez težav (brez da bi bilo potrebno karkoli dodatnega nastavljat/forcat), na osx pa noče. grr ![Sad](images/smiles/icon_sad.gif) |
http://www.fileformat.info/info/unicode/char/10d/index.htm
To bi bil "č". OSX rezultat pa ti vrne kodo za http://www.fileformat.info/info/unicode/char/e7/index.htm
Malo čudno vse skupaj.
LP
|
![](templates/AquaSoft/images/post_sep.gif) |
Stevie Jabuk
Pridružen/a: 23.07.2007 |
Prispevkov: 609 |
Kraj: 1 Infinite Loop |
|
![Moški Moški](templates/AquaSoft/images/gender_m.gif) |
|
Prispevek: #13 Objavljeno 24.02.2012 08:32:56 Re: java in locale |
|
...ni šlo drugače, kot da sem uporabil workaround npr. č spremenil v NCR č
Potem dela povsod. weird.
|
![](templates/AquaSoft/images/post_sep.gif) |