Re: bug report
От | Oliver Jowett |
---|---|
Тема | Re: bug report |
Дата | |
Msg-id | 40C1124B.9010701@opencloud.com обсуждение исходный текст |
Ответ на | bug report (Vasiliev Ivan <biggod@folksnet.com>) |
Ответы |
unsubscribe..
|
Список | pgsql-jdbc |
Vasiliev Ivan wrote: > Hello All! > I use a database with type UNICODE, execute query "select * > from some_table". One field has type text. There are some Europe symbols, > which code more than 128. In theory this should be ok assuming the data was inserted with a suitable client_encoding. > In method > private synchronized String Enconding#decodeUTF8(byte data[], int offset, int length) > throws SQLException > exeption ArrayIndexOutOfBoundsException occures in last else block: > } else { // length == 2 (maybe add checking for length > 3, throw exception if it is > y = data[i+1] & 0xFF; > val = (z - 0xC0)* (pow2_6)+(y-0x80); > l_cdata[j++] = (char) val; > i+=2; > } > Then your PSQLException is created. Do you have a sample schema & data that shows this problem so we can reproduce it? Or can you capture the raw byte-by-byte data given to decodeUTF8() that causes the problem? > But I have made a trick : > } catch (Exception l_e) { > try { > return new String(data, offset, length, "UTF-8"); > } catch(Exception e) { > throw new PSQLException("postgresql.con.invalidchar", l_e); > } > } > And, as no exception occures during string creation, your "fast code" > decodeUTF8() has an error, I suppose.... I believe the String constructors *ignore* errors in the incoming data, replacing them with placeholder characters. Just to check, your JDBC application is not changing client_encoding, right? -O
В списке pgsql-jdbc по дате отправления: