如何正确解码传递给 servlet 的 unicode 参数
假设我有:
<a href="http://www.yahoo.com/" 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!â¢,我根本无法让浏览器呈现正确的字符。
我的问题是:是否有某种和/或和/或其他东西的组合会导致Yahoo!TM出现在输出中?Content-type
new String(request.getParameter("external_title").getBytes(), "UTF-8");
SERVLET