2016-01-11 3 views
0

J'utilise la requête oracle ci-dessous pour récupérer les données de la base de données Oracle. Mon type de colonne est XMLTYPE:UTF-8 dans une requête clobval et un analyseur sax

select a.xmlrecord.getClobVal() xmlrecord "+" 
from" + " " + tablename + " a 

La raison pour laquelle je me sers getclobVal() est que nous avons une limitation dans getstringVal() requête où nous ne pouvons pas récupérer plus de 4000 caractères dans Oracle.

Actuellement j'extraire les données de la base de données et les envoyer directement à l'analyseur sax. Ci-dessous le morceau de code que je suis en utilisant

while (orset.next()){ 
     Reader reader = new BufferedReader(orset.getCharacterStream("xmlrecord")); // to retrieve getClob 
     InputSource is = new InputSource(reader); 
     is.setEncoding("UTF-8"); 

    sp.parse(is, handler); 

    } 

Le problème est que nous ne parvenons pas à récupérer caractères UTF-8, même si je suis l'encodage UTF-8 dans mon code.

Veuillez aider.

+0

avez-vous utilisé UTF-8 tout en enregistrant des données? Aussi, que voulez-vous dire par ** incapable de récupérer les caractères UTF-8 **? –

+0

Oui sabir, utilisé UTF-8 lors de l'enregistrement des données. Nous sommes incapables de définir l'encodage de caractèrestream..une idée? –

+0

quelles erreurs obtenez-vous? –

Répondre

0

Votre reader est un CharacterStream et non un ByteStream. Encodages sont ignorés pour le flux de caractères et a un effet que sur des flux d'octets, donc si vous souhaitez intégrer le codage, créez votre BufferedReader pour flux d'octets au lieu de flux de caractères,

Je cite deux sources ci-dessous,

Class InputSource

L'analyseur SAX utilisera l'objet InputSource pour déterminer comment lire l'entrée XML. Si un flux de caractères est disponible, l'analyseur lira directement ce flux, sans tenir compte de la déclaration de codage trouvée dans ce flux. S'il n'y a pas de flux de caractères, mais il y a un flux d'octets, l'analyseur utilisera ce flux d'octets, en utilisant le codage spécifié dans l'InputSource ou sinon (si aucun codage n'est spécifié) autodétecter le codage de caractères en utilisant un algorithme tel comme celui de la spécification XML. Si ni un flux de caractères ni un flux d'octets n'est disponible, l'analyseur tentera d'ouvrir une connexion URI à la ressource identifiée par l'identificateur de système.

setEncoding

Cette méthode n'a pas d'effet lorsque l'application fournit un flux de caractères .

0

UTF-8 fonctionne correctement avec le jeu de caractères charactertream.

Le morceau de code ci-dessus renvoyé caractères UTF-8 et le problème est dû à la machine Windows ne prend pas en charge le jeu de caractères UTF-8.

Enfin, nous avons installé un package pour le caractère arabe (UTF-8) dans Windows PC et le problème est résolu.