On Monday 03 of April 2006 11:35, Martin Kuba wrote:
> Karel Nagy wrote:
> > Dobry den,
> > resim problem s nasi aplikaci v Jave a s databazi (konkretne
> > Firebird(verze 1.5.2 a 2.0RC1) a s ukladanim a zobrazovanim textu v
> > ruznych znakovych sadach. Jedna se o jednoduchou GUI aplikaci, ktera
> > umoznuje uzivateli pouze vkladata zobrazovat texty do/z databaze.
> > Myslim, ze Java nativne pracuje s texty v UTF. Databazi jsem vytvoril v
> > ISO 8859-2 (to je defaultni kodovani). Tabulka pro texty ma ale
> > nastaveny sloupec TEXT jako UTF8. K databazi se pres driver pripojuji v
> > kodovani ISO8859-2. Pokud vkladam ceske, nemecke nebo polske znaky, tak
> > vse funguje. Ale pokud se pokusim vlozit ruske znaky, tak mne to vzdy
> > zobrazi ctverecky.
> > S vice-znakovymi databazema v Jave nemam zkusenosti a tak nevim, jestli
> > chyby delam na strane Javy nebo databaze. Nemate nekdo radu nebo odkazy
> > na clanky k tomuto tematu?
>
> Nepovedlo se mi najít jak hledat v archivu konference na java.cz,
> takže to napíšu znovu.
>
> Java jede vnitřně v UTF-16, ale to je víceméně jedno,
> protože konverzi mezi Stringy a databází má za povinnost
> JDBC ovladač. Zobrazování v GUI je na tom zcela nezávislé.
> Taky jsou nezávislá všechna další rozhraní mezi Javou
> a vnějším světem, jako zápis a čtení souborů, zpracování
> HTTP požadavků, generování e-mailů atd.
>
> Takže v tomto konkrétním případě musíte zajistit, aby
> JDBC ovladač věděl, jak je nastavena databáze, a v Javě
> samotné nic řešit nemusíte. Neznám Firebird, takže
> v tomhle neporadím. U PostgreSQL a Oracle se JDBC ovladač s databází
> sám domluví, u MySQL se mu musí ručně kódování databáze prozradit.
> Krátké zagůglování odhalilo na
> http://www.firebirdsql.org/index.php?op=devel&sub=jdbc
> text:
>
> Previously the driver used the default JVM encoding to convert bytes
> into strings. Now you can enforce the encoding you like and do not need
> to depend on the regional settings of the host OS.
>
> Vypadá to, že JDBC ovladač pro Firebird je stejný tupan jako
> u MySQL, a musíte mu ručně nastavit (jednotné!) kódování
> pro převod. Takže celou databázi udělejte v utf-8.
A pokud by nebylo mozne nastavit celou DB na UTF-8, tak je treba rucne prevest
data do spravneho kodovani:
new String(origtext.getBytes("UTF-8"),"ISO-8859-2");
je mozne, ze si s tim FireBird poradi a bude umet se k tomu chovat jako k
cistym UTF-8kovym datum (takze pujde i tridit, vyhledavat,...)
Pri ziskavani dat pak bude nutne zase inverznim zpusobem prekonvertovat data.
--
Oto 'tapik' Buchta, [EMAIL PROTECTED]
Senior Engineer, Systinet, Mercury Division
http://www.mercury.com
--
Oto 'tapik' Buchta, [EMAIL PROTECTED]
http://www.buchtovi.cz
______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email
______________________________________________________________________