Jabuk
java in locale
Stevie Jabuk

Stevie Jabuk

Pridružen/a: 23.07.2007
Prispevkov: 609
Kraj: 1 Infinite Loop
Moški

Poglej uporabnikov profil
Prispevek: #1   Objavljeno 22.02.2012 14:08:09
java in locale
Odgovori s citatom Dodaj uporabnika na seznam ignoriranih
Ž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
Stevie Jobs

Stevie Jobs

Pridružen/a: 14.09.2008
Prispevkov: 3287
Kraj: Ljubljana
Ni navedeno

Poglej uporabnikov profil
Prispevek: #2   Objavljeno 22.02.2012 15:24:42
Re: java in locale
Odgovori s citatom Dodaj uporabnika na seznam ignoriranih
Pomoje prebereš fajl v napačnem encodingu na osx...
Stevie Jabuk

Stevie Jabuk

Pridružen/a: 23.07.2007
Prispevkov: 609
Kraj: 1 Infinite Loop
Moški

Poglej uporabnikov profil
Prispevek: #3   Objavljeno 22.02.2012 15:36:31
Re: java in locale
Odgovori s citatom Dodaj uporabnika na seznam ignoriranih
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.
Stevie Jabuk

Stevie Jabuk

Pridružen/a: 21.01.2008
Prispevkov: 384
Kraj: Ravne na Koroškem
Moški

Poglej uporabnikov profil
Prispevek: #4   Objavljeno 22.02.2012 17:48:40
Re: java in locale
Odgovori s citatom Dodaj uporabnika na seznam ignoriranih
verjetno ti počneš v terminalu?... poglej kakšen encoding imaš naštiman... tvoj osx rezultat mi zgleda kot utf16...

LP
Stevie Jabuk

Stevie Jabuk

Pridružen/a: 23.07.2007
Prispevkov: 609
Kraj: 1 Infinite Loop
Moški

Poglej uporabnikov profil
Prispevek: #5   Objavljeno 22.02.2012 20:41:27
Re: java in locale
Odgovori s citatom Dodaj uporabnika na seznam ignoriranih
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:


Stevie Jobs

Stevie Jobs

Pridružen/a: 14.09.2008
Prispevkov: 3287
Kraj: Ljubljana
Ni navedeno

Poglej uporabnikov profil
Prispevek: #6   Objavljeno 22.02.2012 22:50:28
Re: java in locale
Odgovori s citatom Dodaj uporabnika na seznam ignoriranih
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.
Stevie Jabuk

Stevie Jabuk

Pridružen/a: 23.07.2007
Prispevkov: 609
Kraj: 1 Infinite Loop
Moški

Poglej uporabnikov profil
Prispevek: #7   Objavljeno 22.02.2012 23:03:59
Re: java in locale
Odgovori s citatom Dodaj uporabnika na seznam ignoriranih
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.
Stevie Jobs

Stevie Jobs

Pridružen/a: 14.09.2008
Prispevkov: 3287
Kraj: Ljubljana
Ni navedeno

Poglej uporabnikov profil
Prispevek: #8   Objavljeno 22.02.2012 23:11:35
Re: java in locale
Odgovori s citatom Dodaj uporabnika na seznam ignoriranih
Druga opcija je, da uporabiš native2ascii z encoding parametrom

Koda:
native2ascii -encoding utf8

Stevie Jabuk

Stevie Jabuk

Pridružen/a: 23.07.2007
Prispevkov: 609
Kraj: 1 Infinite Loop
Moški

Poglej uporabnikov profil
Prispevek: #9   Objavljeno 22.02.2012 23:17:16
Re: java in locale
Odgovori s citatom Dodaj uporabnika na seznam ignoriranih
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.
Stevie Jobs

Stevie Jobs

Pridružen/a: 14.09.2008
Prispevkov: 3287
Kraj: Ljubljana
Ni navedeno

Poglej uporabnikov profil
Prispevek: #10   Objavljeno 22.02.2012 23:23:52
Re: java in locale
Odgovori s citatom Dodaj uporabnika na seznam ignoriranih
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

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
Stevie Jabuk

Stevie Jabuk

Pridružen/a: 23.07.2007
Prispevkov: 609
Kraj: 1 Infinite Loop
Moški

Poglej uporabnikov profil
Prispevek: #11   Objavljeno 22.02.2012 23:25:48
Re: java in locale
Odgovori s citatom Dodaj uporabnika na seznam ignoriranih
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


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
Stevie Jabuk

Stevie Jabuk

Pridružen/a: 21.01.2008
Prispevkov: 384
Kraj: Ravne na Koroškem
Moški

Poglej uporabnikov profil
Prispevek: #12   Objavljeno 23.02.2012 07:57:21
Re: java in locale
Odgovori s citatom Dodaj uporabnika na seznam ignoriranih
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


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
Stevie Jabuk

Stevie Jabuk

Pridružen/a: 23.07.2007
Prispevkov: 609
Kraj: 1 Infinite Loop
Moški

Poglej uporabnikov profil
Prispevek: #13   Objavljeno 24.02.2012 08:32:56
Re: java in locale
Odgovori s citatom Dodaj uporabnika na seznam ignoriranih
...ni šlo drugače, kot da sem uporabil workaround npr. č spremenil v NCR č
Potem dela povsod. weird.
Ne moreš dodajati novih tem
Ne moreš odgovarjati na teme
Ne moreš urejati svojih prispevkov
Ne moreš brisati svojih prispevkov
Ne moreš glasovati v anketi
Pokaži sporočila:
Pojdi na:
Jabuk.si Vsa vsebina spletne strani je last Jabuk.si in njegovih članov. © 2004 - 2020 Jabuk.si Kontakt Kontakt   Domov Domov   Na vrh strani Na vrh strani