Bonjour à tous,
j'explique mon problème qui est assez bizarre et en fait c'est un bug du driver JDBC, mais on ne sait jamais quelqu'un a peut-être trouvé une solution peut-être barbare mais qui fonctionne.
J'ai une application web dont le character encoding est UTF-8.
Le problème est qu'Oracle ne vérifie pas si le character encoding est bon pour certaine personnes qui au lieu de tout taper dans le textArea de l'application web il font un copy/paste par exemple de word ou d'un document pdf.
Rien de bien grâve jusque là vu qu'avec sqlplus je sais quand même lire les données.
Là où cela se corse c'est que quand j'essaye de faire une query à partir d'une application java pour extraire une partie des données j'ai une exception.
Voici le bout de la query qui fait planter ma requête
Si je fais un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 qry = qry + " translate(utl_raw.cast_to_varchar2(dbms_lob.substr(b.proposal_abstract,2000,1)), chr(13)||chr(9)||chr(10), ' ') as short_abstract,"; qry = qry + " to_char(utl_raw.cast_to_varchar2(dbms_lob.substr(b.proposal_abstract,2000,1))) as short_abstract,";
j'ai cette exception
Code : Sélectionner tout - Visualiser dans une fenêtre à part rs.getString(17);
Maintenant au lieu de faire un rs.getString() je crée un BufferedReader pour lire la valeur de la colonne.Fail to convert between UTF8 and UCS2: failUTF8Conv
Mais j'ai un NullPointerException
Code : Sélectionner tout - Visualiser dans une fenêtre à part bf=new BufferedReader(new InputStreamReader(rs.getBinaryStream(18)));
Donc en résumé mon programme fonctionne bien jusqu'au moment où il tombe sur le blob qui contient des caractères exotiques.
Sur 150.000 lignes qu'il doit me retourner il m'en ressort les 10.000 premières mais à la 10.001 il foire car l'utilisateur a utilisé (on suppose) un copy/paste à partir d'un editeur de texte qui n'utilise pas UTF-8.
En fait ce sont des blobs.
J'ai été voir sur metalink et sur le forum d'oracle, mais aucun workaround à ce jour n'a été implémenté.
Si quelqu'un a une idée elle est la bienvenue.
Ce que je ne comprends pas c'est pourquoi j'ai un NullPointerException.
Pourtant il y a bien une valeur dans la colonne.
D'avance merci pour vos réponses.
Partager