[ _alokiN_ @ 25.11.2009. 13:48 ] @
Zdravo svima,

Imam problem sa koriscenjem CONVERT funkcije. Evo sta se desava:

Imam bazu koja koristi charset WE8ISO8859P1 ali sadrzi neke podatke koji su u charset-u CL8MSWIN1250. Sada pokusavam da prebacim sve te podatke u drugu bazu koja ce biti u charset-u AL32UTF8.

Ovaj upit
Code:
SELECT DUMP(text, 1017) FROM TABLE;


daje:
Code:
Typ=1 Len=3 CharacterSet=WE8ISO8859P1: v,e,e6


Karakter e6 iz charset-a CL8MSWIN1250 bi trebalo da se konvertuje u c4,87 u charset-u UTF8

Ocekivao sam da
Code:
SELECT DUMP(CONVERT(text, 'UTF8', 'CL8MSWIN1250'), 1017) FROM TABLE;


da sledeci rezultat:
Code:
Typ=1 Len=4 CharacterSet=WE8ISO8859P1: v,e,c4,87


ali umesto toga, dobijam:
Code:
Typ=1 Len=4 CharacterSet=WE8ISO8859P1: v,e,d0,b6


Ne razumem zasto se ovde e6 konvertuje u d0,b6 umesto u c4,87.

Sve to za sada pokusavam u Oracle SQLDeveloper-u koji je konfigurisan da koristi UTF8.

Zna li neko o cemu se ovde radi i sta to nisam dobro ukapirao?

Pozdrav,

Nikola
[ brzak @ 25.11.2009. 14:01 ] @
Evo kako mi prebacujemo tekst iz jednog karakter seta u drugi

FUNCTION win1250_to_yuscii (text IN VARCHAR2)
RETURN VARCHAR2
IS
BEGIN
RETURN TRANSLATE (
text
, CHR (142) || CHR (208) || CHR (200) || CHR (198) || CHR (138) || CHR (158) || CHR (240) || CHR (232) || CHR (230) || CHR (154)
, CHR (064) || CHR (092) || CHR (094) || CHR (093) || CHR (091) || CHR (096) || CHR (124) || CHR (126) || CHR (125) || CHR (123)
);
END win1250_to_yuscii;

FUNCTION yuscii_to_win1250 (text IN VARCHAR2)
RETURN VARCHAR2
IS
BEGIN
RETURN TRANSLATE (
text
, CHR (064) || CHR (092) || CHR (094) || CHR (093) || CHR (091) || CHR (096) || CHR (124) || CHR (126) || CHR (125) || CHR (123)
, CHR (142) || CHR (208) || CHR (200) || CHR (198) || CHR (138) || CHR (158) || CHR (240) || CHR (232) || CHR (230) || CHR (154)
);
END yuscii_to_win1250;
[ _alokiN_ @ 25.11.2009. 14:58 ] @
Hvala na odgovoru Brzak,

Moj problem je malo drugaciji - tvoje funkcije omogucavaju promenu slova u tekstu, ali ne i promeni kodinga testa. U mom slucaju, problem je u tome sto jedan kod u dva razlicita charseta ne daje isti karakter.

Dobio sam odgovor na drugom forumu, pa u slucaju da neko napravi istu (glupu) gresku kao i ja, evo resenja ( OTN ), problem je bio u pogresnom charsetu (CL8MSWIN1251 umesto EE8MSWIN1250).

Pozdrav,

Nikola