2010-11-01 2 views
2

Я использую PrintWriter следующим образом, чтобы получить выход в браузере:Использование PrintWriter, я получаю китайские иероглифы барахла в браузере

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

Однако это печатает следующие китайские иероглифы барахла:

сетка 㸳 Xingengtumeng Center Weighted ㍨ ~ Джоан Цзин 㰾 противоречащей Zhipenghonggu ✽ 䔣 䔷 䔷 ❆ 㰾 Chuqingxunzheng ⁤ Мин> 〱㈭ ⴷ〲〱 ㄠ 㨴 ㌰ 㔺 ਱ Him> Jiaobenkangli Цю Chai Хуань ⠊ Chanchaihuanfeng Huimintiwu ਩ Guisanjingtu 㱴 Guanximiyou 㹤 Center Weighted нарушение 㰾 нарушение Zhipenghonggu ✽ 䔣 䔷 䔷 ❆ 㰾 Chi 㰾 Guanximiyou 㹤 Center Weighted нарушение 㰾 нарушение Zhipenghonggu ✽ 䔣 䔷 䔷 ❆㰾 Chuqingxunzheng Min> 〱㈭ ⴷ〲〱 ㄠ 㨴 㐰 ㄺ ਱ Him> научить Бен Kangliqiuchai Хуань ⠊ Chanchaihuanfeng Huimintiwu ਩ Zhenjinyingxun 㱤 Guanxi 㹤 Center Weighted противоречащей 㰾 противоречащей Zhipenghonggu ✽ 䔣 䔷䔷 ❆ 㰾 Chi 㰾 Guanxi 㹤 Center Weighted противоречащей 㰾 противоречащей Zhipenghonggu ✽ 䔣 䔷 䔷 ❆ 㰾 Chiqingxunzheng ⁤ Мин> 〱㈭ ⴷ〲〱 ㄠ 㨴 㜱 ㌺ਸ਼ Him> научить Бен Kangliqiuchai Чан Хуан ⠊ Chaihuanfenghui Мин В Ti ਩ оранжевого Хуэй Цяня ⁳ сохранение Тяньцего 㱴 Guanximiyou 㹤 Center Weighted правонарушение 㰾 Guanximiyou Yi Jing 㰾 твердо ⼠ ~ сетки 㸳 Qiaocuogoujun ⁲ Xingeng Той 㱴 Вы 㸳 㰠 Liaofengyunsuo Yi 㵮 䌢 В Ян Ли Fang Вэнь Вэнь, а именно стропила • Ян Чжи Ци ∽ ≴ канал фонтанный 㵥 Ву Цзяо Ян Ли Ин Фэн Ин Dou • суп Jyo ∽ Juwen привело  Го Ин Фэн колышек Que весь ⤨∻ ~ Joan Jing Yi † спать гору стропила ∽〳 ∰ Рен 楥 можжевельника 㵴 ㌢〰 㸢 ठ агар-агар 㹲 㹤 Ni Chijiyinggu ∽ считал Ян 㸢 Xingeng Tu 㩴 Ро комфорта  Jiuxi 㵳 Yiyulingbin Си ≳⨾ Center Weighted Huiyu 㰾 хлор Чижи 㰾 Joan прочно 㸯взрыв боялся стука ⁡ считает ∽ Мин Ян Чень Ли Та ≴ 㵤 Jiaowuyangli Hong 䅴 постучать ≡ злая собаку царапать Цинь ∽ Zhengbinmuzao Шен Му Джи Мин Се ∽ 㠲 • • помои Гуан ∽: Исполнительный Center Weighted Zhengbinmuzao 㰾 Guanxi㹤 Center Weighted правонарушением 㰾 противоречащей 㰾 Chi 㰾 Jin Feng осмелится  затоплены 㵲 двигаться хлестала хлестала ≥ 㩥 Бо комфорт  Jiushuo 㵳 Yiyulingpa Xi ≳⨾ Хуэй Ю. 㰾 ХЛОРА Yizhi 㰾 тюрьмы 㸯 Yanguangzhaoqian 㵤 Feng хлестала ≥ Tianyu 㵥 вырезать взрыва ≴ канал фонтанный 㵥 Feng хлестала ≥ царапанию Jin Злая собака ∽ считается Ян Цин • Она 㵥 ∢ Моу Hongjingbeifu ∽ 㔲 ∵ † Mei наводнения ∽ 㘳 ⼢ 㰾 Guanxi 㹤 Center Weighted противоречащей 㰾 противоречащей 㰾 Чи 㰾 Цинь осмелится  затоплены 㵲 спасти то, что еще путают 㸢 ⵅ возмущен запутаться 㰺 Hui Yunaoqinnou ∽ противоправное Ао 䍔 Джин злая собака 㸢 㰪 Туан комфорт 㹮 Center Weighted Цинь осмелится 㹬 Мао ⽲ 㰾Dong отличается ⁴ Mount ∽ мокрой юй ≬ Tianyu 㵥 вырезать взрывы ≴ канал хлынул 㵥 сохранить то, что является более запутанным • Jiushuo 㵳 сохранить то, что является более запутанной • Цин Она 㵥 ∢ Его Hongjingfeifu ∽ 㔲 ∵ † Mei диска ∽ 㘳 ⼢ 㰾 Guanxi 㹤 Center Weighted нарушение 㰾 нарушение 㰾 Chi 㰾 Dong эксклюзивного ⁴ Tianyu 㵥 Х юй промышленность ≴ † беспокоиться Ян ∽ коллапс блеск драгоценных камней • Цин Она 㵥 Цзе Сюнь ≴ 㸯 Center Weighted Chi 㰾 Guanxi 㹲 Center Weighted опреде Tu 㹥 Центральновзвешенным затопил Hong

Я пытался использовать String вместо StringBuffer, но это не помогло. Я также попытался установить заголовок типа содержимого следующим

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

до получения писателя ответа, но это тоже не помогло.

В БД нет никаких проблем с данными, как я использовал одни и те же данные для 2 различных целей. В одном я правильный вывод , но в другом я получаю вышеуказанный мусор. Я использовал приведенный выше код в JSP с использованием скриптлетов. Я также дал тип контента для JSP.

+2

Являются ли нежелательные символы в 'StringBuffer'? Можете ли вы вставить некоторые выходные данные? Это звучит как проблема с кодировкой. –

ответ

0

Очевидно, что у вас есть какое-то проблемы кодирования здесь, но я думаю, он находится на сервере или базы данных стороне, а не в браузере.

В БД нет никаких проблем с данными, как я использовал одни и те же данные для 2-х различных вариантов, но в одном я правильный вывод п в другой мусор.

Я не считаю, что аргумент убедительным. на самом деле, я думаю, вы можете быть с видом на реальную причину проблемы.

То, что я думаю, что вам нужно сделать, это добавить на стороне сервера протоколирования, чтобы захватить то, что на самом деле в этом StringBuffer, что вы отправляете в PrintWriter

Кроме того, обратите внимание на то, что отличается о том, что на стороне сервера обрабатывает «2 различные варианты». (что вы имеете в виду под этой фразой?).

Наконец, просьба представить некоторые реальный код, а не только 3 строки описания веб-страниц, которые не компилировать.

2

Получение китайских иероглифов, как Mojibake указывает, что вы неправильно показывает данные UTF-16LE как UTF-8. UTF16- LE хранит каждый символ в 4 байта. в UTF-8, в 4-байтовые панели обычно содержит CJK (китайский/японский/корейский) символов.

, чтобы исправить это, вам необходимо либо показать данные как UTF-16LE или чтобы были сохранены данные в БД, как UTF-8 с самого начала на. так как вы пытаетесь отобразить их в кодировке UTF-8, я думаю, что ваша БД должна быть изменена/конвертированы использовать UTF-8 вместо UTF- 16LE.


Unrelated к конкретной проблеме, хранения HTML (это было то, что эти символы изначально представляют) в базе данных действительно плохая идея;) Это было оригинальное содержание:

<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 

Вот как вы можете превратить этот неправильно закодированный китайский язык в нормальные символы:

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

Обратите внимание, что это не должно использоваться в качестве решения! Это было просто опубликовано как свидетельство основной причины проблемы.

+2

+1 за наличие попугая на голове – willcodejavaforfood

 Смежные вопросы

  • Нет связанных вопросов^_^