Предположим, что у меня есть:
<a href="#" onclick="location.href='http://www.yahoo.com/'; return false;" target="_yahoo"
title="Yahoo!™" onclick="return gateway(this);">Yahoo!</a>
<script type="text/javascript">
function gateway(lnk) {
window.open(SERVLET +
'?external_link=' + encodeURIComponent(lnk.href) +
'&external_target=' + encodeURIComponent(lnk.target) +
'&external_title=' + encodeURIComponent(lnk.title));
return false;
}
</script>
Я подтвердил, что external_title
закодирован как Yahoo!%E2%84%A2
и передан в SERVLET
. Если в SERVLET
я делаю:
Writer writer = response.getWriter();
writer.write(request.getParameter("external_title"));
Я получаю Yahoo! â "¢ в браузере. Если я вручную переключу кодировку символов браузера на UTF-8, она изменится на Yahoo! TM (это то, что я хочу).
Итак, я понял, что кодировка, которую я отправлял в браузер, была неправильной (это было Content-type: text/html; charset=ISO-8859-1
). Я изменил SERVLET
на:
response.setContentType("text/html; charset=utf-8");
Writer writer = response.getWriter();
writer.write(request.getParameter("external_title"));
Теперь кодировка символов браузера - UTF-8, но она выводит Yahoo!, и я не могу заставить браузер отображать правильный символ вообще.
Мой вопрос: есть ли какая-то комбинация Content-type
и/или new String(request.getParameter("external_title").getBytes(), "UTF-8");
и/или что-то еще, что приведет к появлению Yahoo! TM в выводе SERVLET
?