How do I correctly decode unicode parameters passed to a servlet
Posted
by Grant Wagner
on Stack Overflow
See other posts from Stack Overflow
or by Grant Wagner
Published on 2009-01-22T16:39:17Z
Indexed on
2010/05/13
6:34 UTC
Read the original article
Hit count: 290
Suppose I have:
<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>
I have confirmed external_title
gets encoded as Yahoo!%E2%84%A2
and passed to SERVLET
. If in SERVLET
I do:
Writer writer = response.getWriter();
writer.write(request.getParameter("external_title"));
I get Yahoo!â„¢ in the browser. If I manually switch the browser character encoding to UTF-8, it changes to Yahoo!TM (which is what I want).
So I figured the encoding I was sending to the browser was wrong (it was Content-type: text/html; charset=ISO-8859-1
). I changed SERVLET
to:
response.setContentType("text/html; charset=utf-8");
Writer writer = response.getWriter();
writer.write(request.getParameter("external_title"));
Now the browser character encoding is UTF-8, but it outputs Yahoo!â?¢ and I can't get the browser to render the correct character at all.
My question is: is there some combination of Content-type
and/or new String(request.getParameter("external_title").getBytes(), "UTF-8");
and/or something else that will result in Yahoo!TM appearing in the SERVLET
output?
© Stack Overflow or respective owner