2010-11-01 5 views
2

J'utilise PrintWriter comme suit pour obtenir la sortie dans le navigateur:En utilisant PrintWriter, je reçois des caractères junk chinois dans le navigateur

PrintWriter pw = response.getwriter(); 
StringBuffer sb = getTextFromDatabase(); 
pw.print(sb); 

Cependant, ceci affiche les caractères indésirables chinois suivants:

grille 㸳 Xingengtumeng Center Weighted ㍨ ~ Joan Yi Jing 㰾 contravene Zhipenghonggu ✽ 䔣 䔷 䔷 ❆ 㰾 Chuqingxunzheng ⁤ min> 〱㈭ ⴷ〲〱 ㄠ 㨴 ㌰ 㔺 ਱ Lui> Jiaobenkangli Qiu Chai Huan ⠊ Chanchaihuanfeng Huimintiwu ਩ Guisanjingtu 㱴 Guanximiyou 㹤 Center Weighted contravention 㰾 contravention Zhipenghonggu ✽ 䔣 䔷 䔷 ❆ 㰾 Chi 㰾 Guanximiyou 㹤 Center Weighted contravention 㰾 contravention Zhipenghonggu ✽ 䔣 䔷 䔷 ❆㰾 Chuqingxunzheng Min> 〱㈭ ⴷ〲〱 ㄠ 㨴 㐰 ㄺ ਱ Lui> enseigner Ben Huan Kangliqiuchai ⠊ Chanchaihuanfeng Huimintiwu ਩ Zhenjinyingxun 㱤 Guanxi 㹤 Center Weighted contravene 㰾 contravene Zhipenghonggu ✽ 䔣 䔷䔷 ❆ 㰾 Chi 㰾 Guanxi 㹤 Center Weighted contravene 㰾 contravene Zhipenghonggu ✽ 䔣 䔷 䔷 ❆ 㰾 Chiqingxunzheng ⁤ min> 〱㈭ ⴷ〲〱 ㄠ 㨴 㜱 ㌺ਸ਼ Lui> enseigner Ben Chan Kangliqiuchai Huan ⠊ Chaihuanfenghui Min Wu Ti ਩ rétention d'orange Hui Qian Tianjiao 㱴 Guanximiyou 㹤 Centre d'infraction pondérée 㰾 Yi Jing Guanximiyou grille de fermement ⼠ ~ 㸳 Qiaocuogoujun ⁲ Xingeng Tu 㱴 Vous 㸳 㰠 Liaofengyunsuo Yi Wu 㵮 䌢Yang Li Fang Wen Wen savoir arbalétrier • Yang Zhi Qi ≴ canal de jaillissement 㵥 Wu Jiao Yang Li Ying Feng Ying Dou • soupe Jyo ∽ Juwen conduit  Guo Feng Ying cheville Que toute ⤨∻ ~ Joan Yi Jing † dormir Mont arbalétrier ∽〳 ∰ Ren 楥 genièvre 㵴 ㌢〰 㸢 ठ agar-agar 㹲 㹤 Ni Chijiyinggu ∽ considéré Yang 㸢 Xingeng Tu es confort Po  Jiuxi 㵳 Yiyulingbin Xi ≳⨾ Center Weighted Huiyu 㰾 chloro Chizhi 㰾 Joan fermement 㸯Bang craignait cognement ⁡ considérer ∽ Min Yang Qian Li Tu ≴ 㵤 Jiaowuyangli Hong 䅴 frapper ≡ chien enragé gratter Qin Shen Mu ∽ Zhengbinmuzao Ji Min Xie ∽ 㠲 • • pigwash Guang ∽: Centre exécution Weighted 㰾 Zhengbinmuzao Guanxi㹤 Centre contravention pondérée 㰾 contrevienne 㰾 Chi Jin Feng 㰾 osent  inondé 㵲 déplacer jaillissant jaillissant ≥ 㩥 Bo confort  Jiushuo 㵳 Yiyulingpa Xi ≳⨾ Hui Yu chlore Yizhi de la prison 㸯 jaillissant Yanguangzhaoqian 㵤 Feng ≥ Tianyu 㵥 coupé Bang ≴ jaillissant du canal 㵥 Feng jaillissant ≥ zéro Jin chien enragé ∽ considéré comme Yang Qing • Elle 㵥 ∢ Hongjingbeifu Mou ∽ 㔲 ∵ † Mei inondations ∽ 㘳 ⼢ 㰾 Guanxi 㹤 Center Weighted contravene 㰾 contravene 㰾 Chi 㰾 Qin osent  inondé 㵲 sauver ce qui est plus confus 㸢 ⵅ indignés confus 㰺 Hui Yunaoqinnou de faute Ao 䍔 Jin chien enragé 㸢 㰪 Tuan confort 㹮 Center Weighted Qin osent 㹬 Mao ⽲ 㰾Dong différent ⁴ mont ∽ humide yu ≬ Tianyu 㵥 coupe Bang ≴ jaillissant du canal 㵥 sauver ce qui est plus confus • Jiushuo 㵳 sauver ce qui est plus confus • Qing Elle 㵥 ∢ Mou Hongjingfeifu ∽ 㔲 ∵ † Mei conduire ∽ 㘳 ⼢ 㰾 Guanxi 㹤 Center Weighted violation 㰾 violation 㰾 Chi 㰾 Dong exclusive ⁴ Tianyu 㵥 Hu Yu industrie ≴ † inquiétude lustre d'effondrement de Yang de pierres précieuses • Qing Elle 㵥 Jie Xun ≴ 㸯 Center Weighted Chi 㰾 Guanxi 㹲 Center Weighted déter Tu 㹥 Prédominance centrale inondée Hong

J'ai essayé de utiliser String au lieu de StringBuffer, mais cela n'a pas aidé. J'ai aussi essayé de mettre l'en-tête de type de contenu comme suit

response.setContentType("text/html;charset=UTF-8"); 

avant de l'écrivain de réponse, mais cela n'a pas non plus aider.

Dans la DB, il n'y a aucun problème avec les données comme je l'ai utilisé les mêmes données pour 2 fins différentes. Dans un je reçois une sortie correcte , mais dans d'autres, je reçois la jonque ci-dessus. Je l'ai utilisé le code ci-dessus dans JSP en utilisant scriptlets. J'ai aussi donné le type de contenu pour la JSP.

+2

Les caractères indésirables dans 'StringBuffer'? Pouvez-vous coller un exemple de sortie? Cela ressemble à un problème d'encodage. –

Répondre

0

de toute évidence, vous avez une sorte de problème d'encodage ici, mais je pense il est sur le côté serveur ou base de données, et non pas dans le navigateur.

Dans la DB il n'y a pas de problèmes avec les données que je l'ai utilisé les mêmes données pour 2 options différentes, mais dans un i obtenir une sortie correcte n dans d'autres indésirables.

Je ne trouve pas cet argument convaincant. en fait, je pense que vous pouvez être vue sur la cause réelle du problème.

ce que je pense que vous devez faire est d'ajouter une journalisation côté serveur pour capturer ce qui est en fait dans ce StringBuffer que vous envoyez au PrintWriter

aussi, regardez ce qui est différent de la façon que le côté serveur gère les « 2 différentes options ». (que voulez-vous dire par cette phrase?).

Enfin, s'il vous plaît fournir un code REAL, pas seulement trois extraits de ligne qui ne compilera pas.

2

Obtenir les caractères chinois comme Mojibake indique que vous montrant de manière incorrecte des données UTF-16LE en UTF-8. UTF16- magasins lE chaque caractère en 4 octets. en UTF-8, les panneaux de 4 octets contient généralement des caractères CJK (chinois/japonais/coréen).

pour résoudre ce problème, vous devez soit afficher les données au format UTF-16LE ou avoir stocké les données dans la base de données au format UTF-8 depuis le début sur. depuis que vous essayez de les afficher au format UTF-8, je pense que votre base de données doit être reconfiguré/converti pour utiliser UTF-8 au lieu de UTF- 16LE.


non relié au problème concret, le stockage HTML (qui est ce que ces personnages représentent à l'origine) dans une base de données est vraiment une mauvaise idée;) Ce fut le contenu original:

<h3>Comments</h3> <table><tr bgcolor='#E7E7EF'><td>Posted On: 10-27-2010 14:03:51 
, By: Yeshwant Nayak 
([email protected]) 
Excellent</td></tr><tr bgcolor='#E7E7EF'><td></td></tr><tr bgcolor='#E7E7EF'><td>Posted On: 10-27-2010 14:04:11 
, By: Yeshwant Nayak 
([email protected]) 
very good</td></tr><tr bgcolor='#E7E7EF'><td></td></tr><tr bgcolor='#E7E7EF'><td>Posted On: 10-27-2010 14:17:36 
, By: Yeshwant Nayak 
([email protected]) 
This is to test</td></tr></table><br /> <h3>Post Your Comment</h3> <form action="CommentsServlet" method="get" name="commentForm" onsubmit=" return ValidateForm();"> <table width="300" height="300"> <tr><td><label for="name">Comment:<span class="mandTClass">*</span></label><br/><textarea name="content" id="commentTxtArea" class="textarea large" cols="28" rows="6" ></textarea></td></tr><tr><td><label for="name">Name:<span class="mandTClass">*</span></label><br/><input id="name" type="text" name="name" class="name" value="" maxlength="255" size="36"/></td></tr><tr><td><label for="email">E-Mail:<span class="mandTClass">*</span></label><br/><input id="email" type="text" name="email" class="email" value="" maxlength="255" size="36"/></td></tr><tr><td><input type="submit" name="post" value="Post"/></td></tr></table></form 

Voici comment vous pouvez transformer ce chinois incorrectement codé en caractères normaux:

String incorrect = "格㸳潃浭湥獴⼼㍨‾琼扡敬㰾牴戠捧汯"; 
String original = new String(incorrect.getBytes("UTF-16LE"), "UTF-8"); 

Notez que ceci ne devrait pas être utilisé comme solution! C'était juste affiché comme preuve de la cause profonde du problème.

+2

+1 pour avoir un perroquet sur la tête – willcodejavaforfood

Questions connexes