Получение китайских символов как Моджибаке означает, что вы неправильно отображаете данные UTF-16LE как UTF-8.UTF16-LE сохраняет каждый символ в 4 байта.В UTF-8 4-байтовые панели обычно содержат символы CJK (китайский / японский / корейский).
Чтобы исправить это, необходимо либо отобразить данные как UTF-16LE, либо сохранить данные вБД как UTF-8 с самого начала.Поскольку вы пытаетесь отобразить их как UTF-8, я думаю, что ваша БД должна быть реконфигурирована / преобразована для использования UTF-8 вместо UTF-16LE.
Не связано к конкретной проблеме, хранение HTML (именно то, что эти символы изначально представляют) в базе данных действительно плохая идея;) Это было оригинальное содержание:
<h3>Comments</h3> <table><tr bgcolor='#E7E7EF'><td>Posted On: 10-27-2010 14:03:51
, By: Yeshwant Nayak
(ynayak@cisco.com)
Excellent</td></tr><tr bgcolor='#E7E7EF'><td></td></tr><tr bgcolor='#E7E7EF'><td>Posted On: 10-27-2010 14:04:11
, By: Yeshwant Nayak
(ynayak@cisco.com)
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
(ynayak@cisco.com)
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");
Обратите внимание, что это не должно использоваться в качестве решения!Это было просто опубликовано в качестве доказательства основной причины проблемы.