Отображать китайский иероглиф в файле HTML

у нас есть одна программа сервлета, которая использует код HTML внутри программы сервлета, т.е.

HTML.append("<html>");
HTML.append(lnTag);
HTML.append("<head>");
HTML.append(lnTag);
HTML.append("<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>");
String titalsLang = resourceBundle.getString("eayslip.tan.title");  
HTML.append("<title>"+resourceBundle.getString("eayslip.tan.title")+"</title>");</i>

// and list of codes... 

out.print(HTML);
response.setContentType("text/html; charset=UTF-8");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);

Я получаю китайский иероглиф из файла свойств при отладке кода. Но как только ответ отправляется на страницу, на странице html мы получаем вопросительный знак ?????.

У нас нет проблем с английскими символами, и они отображаются правильно.


person Amit Kumar    schedule 11.09.2015    source источник
comment
stackoverflow.com/questions/20670034 / должен решить вашу проблему.   -  person Sinistralis    schedule 11.09.2015
comment
Добро пожаловать в Stack Overflow. Пожалуйста, прочитайте страницу справки редактора, чтобы в будущем вы могли форматировать свои сообщения более читабельно: stackoverflow.com/editing-help   -  person Jon Skeet    schedule 11.09.2015
comment
@ Sinistralis, я использовал ту же концепцию, которую вы мне предложили. Но я получаю то же, что и предыдущий вопрос.   -  person Amit Kumar    schedule 11.09.2015
comment
Попробуйте установить ‹meta http-equiv=Content-Type content=text/html; charset=utf-8› в ваш HTML.   -  person DOTNET Team    schedule 11.09.2015


Ответы (1)


Я подозреваю, что проблема заключается в том, что вы устанавливаете тип контента, включая кодировку, после вызова HttpServletResponse.getWriter(), предполагая, что именно отсюда берется out.

Из документации ServletResponse.setContentType:

Этот метод не имеет никакого эффекта, если вызывается после фиксации ответа. Он не устанавливает кодировку символов ответа, если он вызывается после вызова getWriter или после фиксации ответа.

По сути, вы должны установить все заголовки в ответе, прежде чем вызывать getWriter... и если вы вызываете getOutputStream, а не getWriter, вы не должны... использовать средство записи для текстовых данных и поток для двоичных данных.

person Jon Skeet    schedule 11.09.2015
comment
Спасибо за ваш ответ. Я следую твоему указанию. Теперь китайский иероглиф отображается на веб-странице. :) - person Amit Kumar; 11.09.2015