Comment décoder correctement unicode paramètres passés à une servlet

Supposons que j'ai:

<a href="http://www.yahoo.com/" target="_yahoo" 
    title="Yahoo!&#8482;" 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>

J'ai confirmé external_title encodés comme Yahoo!%E2%84%A2 et passé à SERVLET. Si dans SERVLET je fais:

Writer writer = response.getWriter();
writer.write(request.getParameter("external_title"));

- Je obtenir Yahoo!â"¢ dans le navigateur. Si je le changer manuellement le navigateur de codage de caractères UTF-8, il se transforme en Yahoo!TM (qui est ce que je veux).

Alors j'ai pensé que l'encodage j'ai été l'envoi au navigateur a été mauvais (il a été Content-type: text/html; charset=ISO-8859-1). J'ai changé SERVLET à:

response.setContentType("text/html; charset=utf-8");
Writer writer = response.getWriter();
writer.write(request.getParameter("external_title"));

Maintenant le navigateur de codage de caractères UTF-8, mais elle renvoie Yahoo!⢠et je ne peux pas obtenir le navigateur de rendre le caractère correct du tout.

Ma question est: est-il une combinaison de Content-type et/ou new String(request.getParameter("external_title").getBytes(), "UTF-8"); et/ou quelque chose d'autre qui entraînera Yahoo!TM figurant dans le SERVLET de sortie?

InformationsquelleAutor Grant Wagner | 2009-01-22