Tema: Re: Klausimas apie JAVA
Autorius: Laimis
Data: 2011-03-21 12:24:00
Nerijus rašė:
> On 2011-03-21 10:43, Nerijus wrote:
>> On 2011-03-21 10:20, Nerijus wrote:
>>> On 2011-03-20 19:50, Laimis wrote:
>>>> Nerijus rašė:
>>>>
>>>>> Taigi jei kazka galeciau dabar toje senienoje keisti, tai tikrai taip
>>>>> nepalikciau, esme, kad bandoma kazka prie tos senos sistemos
>>>>> "prijungti" ir ten keisti nieko nenorima. Ish kitos puses kadangi tai
>>>>> tik bandymai, tai ir nesinori daug investuoti, todel jieshkau
>>>>> paprasciausio sprendimo (nieko neprograminant taip sakant, nes ish
>>>>> esmes ne programeris ir esu).
>>>>>
>>>>> Vat dabar dar kilo ideja pabadyti koki nors kito gamintojo Interbeiso
>>>>> JDBC draiveri, gal kas turi kokios patirties?
>>>>
>>>> O ko iš to kito tikėtumeisi? Kad jis automagiškai konversiją darytų,
>>>> ar,
>>>> kad apskritai turėtų tokią galimybę?
>>>> Kita vertus, kai kas čia man dar neaišku:
>>>>
>>>> > s1 = new String(str1.getBytes("ISO8859_13"), "ISO8859_1");
>>>> > return s1;
>>>>
>>>> kas įrašoma į failą? (attachment'o norėtųsi, kai string'ai turi bent
>>>> keletą įvairių lietuviškų raidžių):
>>>>
>>>> File f = new File("out.txt");
>>>> FileWriter out = new FileWriter(f);
>>>>
>>>> out.write(s1 + "\n");
>>>> out.write(str1 + "\n");
>>>> out.close();
>>
>>> Gerai pabandysiu irasyti viska i faila ir paziureti kas gaunas.
>>>
>>> N. M.
>>
>> Nu va, prikabinu faila, bet gavos kazkas ne taip. Kiek suprantu siame
>> faile viskas sukoduote UTF8, Ir atidarius ji ISO8859_13 koduote nieko
>> doro nesimato.
>>
>> N. M.
>
> Truputi pataisaiu koda:
>
> s1 = new String(str.getBytes("ISO8859_13"), "ISO8859_1");
>
> OutputStream fout = new FileOutputStream("/tmp/out2.txt");
> OutputStreamWriter o = new OutputStreamWriter (fout, "ISO8859_1");
>
> o.write(s1 + "\n");
> o.write(str + "\n");
> o.close();
>
> Ir efektas toks koks ir rasant i DB. Tai yra "lyg ir" naudojama koduote
> ISO8859_1, bet tekstas yra ISO8859_13 koduotes, ir atidarius faila tokia
> koduote matomos lietuviskos raides normaliai.

Tai dabar matyti problema. Ji net ne DB pusėje, o XML duomenų (gavimo) 
grandinėje, nes gauti string'ai yra nekorektiškai sumalti 
(perinterpretuoti-perkoduoti) iš ISO-8859-13 (tokia koduote yra 
pirminiai/pateikiami duomenys) į ISO-8859-1.


ĄČšųū: 0x{C0, C8, F0, F8, FB}@ISO-8859-13

perinterpretavus ISO-8859-1 koduotėje, gauname:

ÀÈðøû: 0x{C0, C8, F0, F8, FB}@ISO-8859-1

Visa tai dar pervertus į UTF-8 (FileWriter.write(); prielaida, kad 
default charset yra UTF-8) gauname:

ÀÈðøû: 0xC3{80, 88, B0, B8, BB}@UTF-8


Taigi, ieškok problemų toje XML skaitymo dalyje, kurioje gauti duomenys 
(ISO-8859-13) interpretuojami, lyg jie būtų ISO-8859-1 koduotės.