Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[rešeno] Java aplikacija - problem sa znacima na linux-u

[es] :: Linux aplikacije :: [rešeno] Java aplikacija - problem sa znacima na linux-u

Strane: 1 2

[ Pregleda: 8975 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

suadhm
Suad Adrović
Podgorica

Član broj: 90644
Poruke: 339
195.66.166.*



Profil

icon [rešeno] Java aplikacija - problem sa znacima na linux-u07.10.2013. u 08:34 - pre 127 meseci
Imam jednu aplikaciju koja je rađena u JAVA-i. Na windows-u sve radi ok. Ali na linux-u ista aplikacija ne prepoznaje naše karaktere Č i Ć, već ih prikazuje kao znak ?. Dok karaktere Š, Ž i Đ prepoznaje bez problema. Inače aplikacija taj tekst čita iz Oracle XE 10gR2 baze koja je instalirana na istom host-u. Baza prikazuje sve karaktere pravilno (provjereno pomoću SQLPlus-a). Linux je CentOS 6.3 x32.

Da li se ovaj problem može otkloniti nakim podešenjem Linux-a i kako to uraditi?

 
Odgovor na temu

Jing Jang
Srbija, Priboj

Član broj: 315569
Poruke: 593
*.dynamic.isp.telekom.rs.



+9 Profil

icon Re: [rešeno] Java aplikacija - problem sa znacima na linux-u08.10.2013. u 09:36 - pre 127 meseci
Probaj u terminalu da ukucaš ovo:
sudo apt-get install sun-java6-jre i pritisni Enter.
Mislim da to ima veze u vezi izbora jezika kod instalacije jave a moguće je i do browsera ( tako se kreću diskusije u vezi problema sa javom). Nadam se da će ti ovo pomoći.
 
Odgovor na temu

zoranix
Software Architect
IS MicroCore
Knjaževac

Član broj: 243111
Poruke: 162
*.static.isp.telekom.rs.

Sajt: www.micro.co.rs


+36 Profil

icon Re: [rešeno] Java aplikacija - problem sa znacima na linux-u08.10.2013. u 10:15 - pre 127 meseci
Ovo bi trebalo da ima isključivo veze sa enkodingom same baze. Trebalo bi da se postavi enkoding na UTF-8 i sve bi trebalo da bude u redu. Ne znam kako je kod JDBC-a za Oracle, zapravo da li se negde navodi enkoding s klijentske strane, ali ako se navodi trebalo bi opet staviti UTF-8.
JDBC drajver bi sam trebalo da prepozna enkoding klijenta i da izvrši internu konverziju i pretpostavljam da je tako i sa Oracle-ovim JDBC drajverom. Windows ima nestandardni enkoding koji, zavisno od instalacije, može biti različit. Windows interno podrazumevano ne koristi nikada UTF-8, što stvara ogromne probleme, programerima i WEB dizajnerima, naročito kod nas u Srbiji. Najverovatnije je to problem i u ovom slučaju, naročito kada se radi o mešovitom Windows / Linux okruženju.
Naime, ako je baza UTF-8, onda bi svi klijentski zapisi trebalo da budu konvertovanu u UTF-8, ali najverovatnije da nije (proverite sa kog računara Windows/Linux je kreirana baza!). Povratno bi se slogovi iz baze konvertovali iz UTF-8 u klijentski enkoding, što bi da je sve OK trebalo da bude stvarno OK. Kako baza nije UTF-8, onda Linux mašina dobija nešto što ne ume da konvertuje, ili mi se bar tako čini. Proverite ovo pa se javite....
 
Odgovor na temu

suadhm
Suad Adrović
Podgorica

Član broj: 90644
Poruke: 339
*.crnagora.net.



Profil

icon Re: [rešeno] Java aplikacija - problem sa znacima na linux-u08.10.2013. u 11:41 - pre 127 meseci

Ja sam instalirao JAVA 7 JRE i JAVA 7 JDK sve update 40, to su ova dva fajla:

jdk-7u40-linux-i586.rpm
jre-7u40-linux-i586.rpm

Ali kada hoću da provjerim trenutnu verziju JAVA-e, dobijam sledeće:

$ java -version
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.1) (rhel-1.45.1.11.1.el6-i386)
OpenJDK Client VM (build 20.0-b12, mixed mode)


Kako da podesim da v6 JAVA-a ne bude defaultn-a JAVA?

Što se tiče baze instalirana je Oracle 10gR2 XE universal database:

oracle-xe-univ-10.2.0.1-1.0.i386.rpm

NLS characterset je: AL32UTF8 i on prikazuje sve karaktere kako treba:

SQL> select naziv from artikli;

NAZIV
--------------------------------------------------
SENDVIČ SA PILETINOM
SLADOLED
KIKIRIKI
ESPRESSO
KOKA KOLA
NIKIĆKO TOČENO
SOMERSBY
RED BULL
PRVIJENAC
VRANAC

10 rows selected.


Problem je što to aplikacija u JAVA-i ne prepoznaje kako treaba.

 
Odgovor na temu

suadhm
Suad Adrović
Podgorica

Član broj: 90644
Poruke: 339
*.crnagora.net.



Profil

icon Re: [rešeno] Java aplikacija - problem sa znacima na linux-u08.10.2013. u 14:53 - pre 127 meseci
Podesio sam da defaultn-a JAVA bude JRE 1.7 update 40. Ali ni to nije ispravilo problem.
 
Odgovor na temu

Jing Jang
Srbija, Priboj

Član broj: 315569
Poruke: 593
*.dynamic.isp.telekom.rs.



+9 Profil

icon Re: [rešeno] Java aplikacija - problem sa znacima na linux-u08.10.2013. u 15:24 - pre 127 meseci
Pogledaj ovde kako je nađeno rešenje za pomenuti problem.
http://stackoverflow.com/quest...xt-unicode-characters-and-java
 
Odgovor na temu

zoranix
Software Architect
IS MicroCore
Knjaževac

Član broj: 243111
Poruke: 162
*.static.isp.telekom.rs.

Sajt: www.micro.co.rs


+36 Profil

icon Re: [rešeno] Java aplikacija - problem sa znacima na linux-u08.10.2013. u 20:04 - pre 127 meseci
Pokušaj dodavanje artikala iz aplikacije na Linux mašini. Ako aplikacija pokrenuta na Linux mašini vidi korektno dodate artikle, sa iste mašine, koji u nazivu imaju slova poput "č", "ć", "ž", "š" i "đ", onda definitivno nije problem sa bazom. Moja iskustva su da je uvek problem na Windows mašini, jer NI JEDAN WINDOWS NIJE UNICODE iznutra. Ovo pravi ogromne probleme programerima u mešovitim okruženjima. Ovaj primer s početka mog odgovora bi to trebalo da potvrdi!
 
Odgovor na temu

suadhm
Suad Adrović
Podgorica

Član broj: 90644
Poruke: 339
*.crnagora.net.



Profil

icon Re: [rešeno] Java aplikacija - problem sa znacima na linux-u09.10.2013. u 11:58 - pre 127 meseci
Probao sam sa UNICODE fontovima ali ni to nije riješilo problem, sve je isto.

 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: [rešeno] Java aplikacija - problem sa znacima na linux-u09.10.2013. u 12:11 - pre 127 meseci
Suade, kao i obično kada imaš problem, rešenje je NLS_LANG...

http://stackoverflow.com/quest...g-setting-for-jdbc-thin-driver

[Ovu poruku je menjao djoka_l dana 09.10.2013. u 13:21 GMT+1]
 
Odgovor na temu

suadhm
Suad Adrović
Podgorica

Član broj: 90644
Poruke: 339
*.crnagora.net.



Profil

icon Re: [rešeno] Java aplikacija - problem sa znacima na linux-u09.10.2013. u 14:58 - pre 127 meseci
Ne pomaže ni to. Podesio sam ENV na:

NLS_LANG=CROATIAN_CROATIA.EE8MSWIN1250; export NLS_LANG

Ali ne pomaže.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: [rešeno] Java aplikacija - problem sa znacima na linux-u09.10.2013. u 15:28 - pre 127 meseci
Pa nemoj da postavljaš na 1250 kodnu stranicu Linux, nego na UTF8.
 
Odgovor na temu

suadhm
Suad Adrović
Podgorica

Član broj: 90644
Poruke: 339
*.crnagora.net.



Profil

icon Re: [rešeno] Java aplikacija - problem sa znacima na linux-u10.10.2013. u 07:34 - pre 127 meseci
Već je bio NLS_LANG=AMERICAN_AMERICA.AL32UTF8

Pa nije pomoglo.

Inače to je standalone .jar fajl koji se pokreće na radnim stanicama. Nije u pitanju mrežna aplikacija.
 
Odgovor na temu

suadhm
Suad Adrović
Podgorica

Član broj: 90644
Poruke: 339
*.crnagora.net.



Profil

icon Re: [rešeno] Java aplikacija - problem sa znacima na linux-u10.10.2013. u 08:15 - pre 127 meseci


Pokušao sam da iz aplikacije unesem nešto sa karakterima Š,Č,Ć,Đ i Ž.

U bazu on to upiše kao Ĺ Ĺ ÄÄÄÄŽŽAÄÄ, a aplikacija to posle čita kako treba bez problema.

Karaktere Č i Ć koje dodam direktno u bazu aplikacija čita kao [] i ?.

Ne kapiram kako ovo radi.

Ima li neko ideju?
 
Odgovor na temu

zoranix
Software Architect
IS MicroCore
Knjaževac

Član broj: 243111
Poruke: 162
*.static.isp.telekom.rs.

Sajt: www.micro.co.rs


+36 Profil

icon Re: [rešeno] Java aplikacija - problem sa znacima na linux-u10.10.2013. u 09:08 - pre 127 meseci
Pa ako ste pokušali upis u bazu sa pomenutim karakterima i čitanje upisanog, nakon toga, je sa "kukama i kvakama", očigledano da je enkoding baze loš.
Koliko to god izgledalo nemoguće to jeste razlog. Pomenuti NLS_LANG=AMERICAN_AMERICA.AL32UTF8 trebalo bi da se odnosi samo na poruke koje generiše konzolni alat za SQL upite i eventualno neki klijent koji dobija tekstualne poruke o opomenama, napomenama i greškama od baze sa servera. Sam enkoding baze izgleda da nema veza sa NLS_LANG=AMERICAN_AMERICA.AL32UTF8. Ja nemam iskustva sa Oracle, ali imam sa PostgreSQL, gde isto služi za ono što sam malopre rekao. Prilikom kreiranja baze se navodi enkoding i ne znam da li se kod Oracle može menjati kasnije, bez brisanja/ponovnog_kreiranja baze.
Enkoding se sa klijentske strane nigde ne podešava, ili ako se podešava to je iz nekih drugih razloga, za neka pisma različita od onog koji ima enkoding baze. Najverovatnije je da je baza kreirana sa Windows mašine, gde je podrazumevan 1250, ili tako nešto. M$ očigledno misli da nema drugih operativnih sistema u galaksiji Mlečnog puta, tako da ne mora da poštuje standarde. Kada si to isto učinio sa Linux mašine (Unicode je ovde standard, kao i na svim ostalim OS-evima, izuzev Windowsa!), onda se pojavio problem sa enkodingom, pa moraš eksplicitno sa klijentske strane da radiš enkoding.
Ovakvih slučajeva sam imao ranije mnogo sa PostgreSQL bazom i teško sam shvatio šta se događa u mešovitim okruženjima. Interesantno, uvek sam krivio Linux ("on to tamo nešto mulja i nije kompatibilan sa Windowsom!"), ali se ispostavilo da je to maslo M$ i da Linuxi, kao ni drugi Unixi (MAC OS X, Solaris, AIX...) nemaju s tim ništa. Ako bazu kreiraš sa Linux mašine, radiće ti sve (valjda!) kako treba, čak i na Windowsu. Treba napomenuti da možda nisi obratio pažnju kod kreiranja baze s Windows mašine i prihvatio podrazumevani enkoding 1250, a zapravo ga je trebalo prometini u UTF-8.

 
Odgovor na temu

suadhm
Suad Adrović
Podgorica

Član broj: 90644
Poruke: 339
*.crnagora.net.



Profil

icon Re: [rešeno] Java aplikacija - problem sa znacima na linux-u10.10.2013. u 09:27 - pre 127 meseci
Na početku da kažem da je problem riješen.

Ali prvo da objasnim malo.

Inatalirana je Oracle 10gR2 XE (Express Edition) baza podataka, to je free (light) verzija standardne Oracle 10gR2 Baze Podataka (koja se plaća).

XE nema opciju biranja karakter seta prilikom instalacije, kao što to ima standradna baza.

XE 10gR2 ima dvije verzije:

1. oracle-xe-10.2.0.1-1.0.i386.rpm - samo Western European character set

2. oracle-xe-univ-10.2.0.1-1.0.i386.rpm - Universal character set

Ja sam instalirao ovu drugu.

Koga interesuje detalje može naći na:

http://docs.oracle.com/cd/B253...doc/install.102/b25144/toc.htm

XE 10gR2 postoji samo za x32 platforme (Windows i Linux).

Ima i novija verzija XE 11gR2 ali za Linux postoji samo x64 verzija, dok za Windows postoji samo x32 verzija:

http://www.oracle.com/technetw...s-edition/downloads/index.html


E sad moja instalacija ide ovako:

1. Ide silent instalacija Oracle XE baze
2. Nakon toga se pokreće skripta za kreiranje usera na bazi
3. I na kraju se pokreće skripta koja u bazi za kreiranog user-a kreira objekte (tabele, procedure, funkcije, ....) i dodaje po par redova u svaku tabelu (kasnije se baza puni samo iz aplikacije)

Problem je riješen tako što je skripta za kreiranje objekata u bazi prekompajlirana u UTF-8 format i nakon što je sve urađeno sa novom skriptom program radi bez problema.

Ljudi VELIKO vam hvala na pomoći!!!!

Pozdrav.





 
Odgovor na temu

zoranix
Software Architect
IS MicroCore
Knjaževac

Član broj: 243111
Poruke: 162
*.static.isp.telekom.rs.

Sajt: www.micro.co.rs


+36 Profil

icon Re: [rešeno] Java aplikacija - problem sa znacima na linux-u10.10.2013. u 11:30 - pre 127 meseci
Rekoh ja...
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Java aplikacija - problem na linux-u10.10.2013. u 11:45 - pre 127 meseci
@zoranix nisi bio ni blizu...

Dakle problem je bio u inicijalnim podacima koji su uneti u bazu i koji nisu bili u UTF8 formatu. Umesto toga, uneti su, verovatno, podaci u 1250 kodnoj stranici, koji se nisu ispravno videli u Java aplikaciji. Sa druge strane, Java aplikacija je ispravno prihvatala UNICODE znake, ispravno ih je slala u bazu, baza ih je ispravno upisivala i vraćala aplikaciji.

Jedini problem koji je ostao nerazjašnjen je kojim si ti alatom video da su inicijalno upisani loši podaci u bazu izgledali kao da su ispravni i kakvo je bilo podešeno okruženje iz kojih si posmatrao neispravne podatke kao ispravne...
 
Odgovor na temu

zoranix
Software Architect
IS MicroCore
Knjaževac

Član broj: 243111
Poruke: 162
*.static.isp.telekom.rs.

Sajt: www.micro.co.rs


+36 Profil

icon Re: [rešeno] Java aplikacija - problem sa znacima na linux-u10.10.2013. u 12:24 - pre 127 meseci
Mislim da ti nisi razume o čemu se radi:
1. Baza vrši enkoding zapis u fomatu za koji je kreirana. Pokazalo se da je identični postupak kod Oracle-a i PosgreSQL-a. Nije bila kreirana za UTF-8, nego neki drugi (nebitno koji!) enkoding. To je uzrokovalo nerazumevanje Linux klijenata za enkodovane podatke iz baze, ali ne i Windows klijenata za čiji enkoding (1250) je kreirana prethodno baza;

2. Nakon kreiranja Unicode baze sa UTF-8, sve je proradilo, što sam svo vreme tvrdio, dok su neki predlagali da reinstaliraš javu, ili "šteluješ" enkoding klijenata (čak sam i ja posumnjao da je tu možda problem, dok nije kasnije pojašnjeno!);

3. NLS_LANG nije rešio probleme jer se time na PostgreSQL-u, ali ispada i Oracle-u, definišu tekst poruke koje baza "isplajuje" u slučaju grešaka i upozorenja (jezik na kom će biti ispisane!).

Dakle baza je ta koja je odgovorna kako će se smeštati VARCHAR u njoj i koji enkoding će biti podrazumevani. Klijent preko drajvera bude obavešten o tome iz meta podataka još prilikom konekcije, ili u najgorem slučaju klijent pretpostavi da je s druge strane UNICODE, pa pokuša enkoding s UNICODE-a. Windows klijent očigledno očekuje 1250, namesto UNICODE, ali se savršeno izbori i sa UNICODE. Windows iznutra nije UNICODE i to delimično pravi probleme.
Evo primera:
Napravi neki HTML fajl na Windows-u, sa "našim" slovima "ŠĐČĆŽ" i iskopiraj ga na WEB server, a onda ga otvori na Linux-u iz brouzera. Ako prilikom snimanja nije rečeno da se snimi u UTF-8, pomenuti HTML će biti snimljen najverovatnije u 1250 format, a Linux će videti "kuke i kvake", namesto naših slova. Ovo nije dokaz da Windows iznutra nije Unicode, već to piše svuda gde se pominje to, ali je dobar primer problema koji neiskusni programeri teško razumeju.

 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: [rešeno] Java aplikacija - problem sa znacima na linux-u10.10.2013. u 12:46 - pre 127 meseci
@zoranix meni sa 20 godina iskustva sa Oracle DBA pričaš kako Oracle baza radi? Uopšte nisi u pravu. Prebacivanje iz jednog kodnog rasporeda u drugi radi klijent u Oracle okruženju. Konkretno to radi SQL*Net, odnosno JDBC kod Java programa. Klijent zna kako je podešen NLS_LANG na klijentskoj strani (koji ne definiše samo jezik i teriroriju nego i kodni raspored), kao i koji je podrazumevani jezik/teritorija/kodni raspored u bazi. Bazi je bitan kodni raspored samo za colating, tj. za sortiranje i za prebacivanje u UPERCASE/LOWERCASE. Što se tiče dela tvog odgovora, tačno je da jezik i teritorija određuju jezik poruka o greškama, ali to nije ovde bitno. Bitan je kodni raspored, na primer NLS_LANG=AMERICAN_AMERICA.ALL32UTF8 (to znači da je kodni raspored UTF8).

Suad je već rekao da je uradio instalaciju kako treba (unicode verziju XE softvera), ali je napravio grešku kod inicijalnog punjenja podacima. Punjenje podacima se radi iz klijenta (SQL*Plus programa) koji je upucao 1250 ili neke druge podatke onako kako je mislio da treba (bez konverzije), pa je taj isti klijent, sa istim podešavanjima čitao đubre iz baze (koju je baš briga šta je u varchar poljima).

Scenario: Kreirana baza sa unicode rasporedom, na klijentu podešena UTF8 kodna stranica ali podaci sa 1250 kodnom stranicom. Klijent šalje podatke tačno onako kako pišu jer zbog toga što je i na jednoj i na drugoj strani isti kodni raspored (UTF8) klijent ne smatra da treba da radi bilo kakvu konverziju.
 
Odgovor na temu

suadhm
Suad Adrović
Podgorica

Član broj: 90644
Poruke: 339
*.crnagora.net.



Profil

icon Re: [rešeno] Java aplikacija - problem sa znacima na linux-u10.10.2013. u 12:47 - pre 127 meseci
Code:
 kojim si ti alatom video da su inicijalno upisani loši podaci u bazu izgledali kao da su ispravni 


Izgledali su ispravno kada ih pregledam iz Oracle-ovog SQLPlus terminala. Tada su u aplikaciji prikazivani neispravno.

Ne znam na šta tačno misliš pod:

Code:
 kakvo je bilo podešeno okruženje iz kojih si posmatrao neispravne podatke kao ispravne 


Ako misliš na NLS env parametar, tada je bio a i sada je ostao NLS_LANG="AMERICAN_AMERICA.AL32UTF8"

 
Odgovor na temu

[es] :: Linux aplikacije :: [rešeno] Java aplikacija - problem sa znacima na linux-u

Strane: 1 2

[ Pregleda: 8975 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.