Vystup z DB je v poradku. Problem byl v tom pristupu ven. Ja to musim proste prekodovat az v komunikacnim rozhrani. Nechci si s tim hrat kdyz mam 5 zpusobu jak to do te kasy ruzne dostat. Vcetne externich programu. Imho pomuze ta prace s byte[].

Jeste pisnu vysledek. Moc diky vsem.

Pet

On Thu, 20 Sep 2007 10:51:31 +0200, Martin Kuba <[EMAIL PROTECTED]> wrote:

Petr Burdik wrote:
Pouzivate ji i na prekodovani do jinych kodovani? Jak jsme tu meli ty
postupy k prekodovani z utf na cp1250, tak to se mi nedari. Vyhodi mi to
misto hacku a carek otazniky. Pouzivam ted toto:

String nameCP1250 = new String( nameUTF8.getBytes("utf8"), "CP1250" );

Nevite cim by to mohlo byt?

Tahle konstrukce je dost nesmyslna. Jmeno promenne nameUTF8
vzbuzuje dojem, ze se jedna o UTF8 bajty, ale je to evidntne
Java String, ktery je tvoren znaky. A ten prevedete
na posloupnost bajtu v utf-8, a tu pak berete jako
bajty v Cp1250 a udelate z toho zase Java String.

Vysledek musi byt naprosty nesmysl, krome pripadu,
kdy v promenne "nameUTF8" uz byl naprosty nesmysl
vznikly nactenim Cp1220 bajtu omylem povazovanych za utf-8 bajty,
pak se ty dva nesmysly navzajem vyrusi.


Takze si rozmyslete, co vlastne potrebujete,
a hlavne si uvedomte rozdil mezi *znaky* a *bajty*.
String je retezec *znaku*, a prevodem na konkretni
kodovani vznikne poslopnost *bajtu*. A naopak.

Takze pokud mate na vstupu, treba z textoveho souboru,
*bajty* v UTF-8, a chcete na vystupu *bajty* v CP1250,
tak prevod probiha pouhym nactenim do Stringu a jeho
opetovnym zapsanim, takhle:


BufferedReader in =
  new BufferedReader(
    new InputStreamReader(
     new FileInputStream("soubor_v_utf8.txt"),"utf-8"));

PrintWriter out =
  new PrintWriter(
    new BufferedWriter(
      new OutputStreamWriter(
        new FileOutputStream("soubor_v_Cp1250.txt"),"Cp1250")));

String inputLine;

while ((inputLine = in.readLine()) != null) {
       out.println(inputLine);
}

Psal jste puvodne cosi o databazi, ze je v UTF-8. To by melo byt
uplne jedno, protoze je odpovednost JDBC ovladace, aby metoda
ResultSet.getString() vracela javovy String, tedy probehlo prekodovani
z bajtu v databazi na znaky ve Stringu.

Kdysi (asi deset let zpatky) tohle nefungovalo v Postgresu,
ale davno to funguje, a nezda se mi, ze by dnes existoval
JDBC ovladac, ktery by prekodovani neprovadel spravne.
Co pouzivate za databazi ?

Makub



--
Zpráva vytvořena poštovním klientem "M2", který je součástí webového prohlížeče Opera.
Více na http://www.opera.com/mail/ .

Odpovedet emailem