假设我有:
<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!但我无法让浏览器呈现正确的字符.
我的问题是:是否存在某些组合Content-type和/或new String(request.getParameter("external_title").getBytes(), "UTF-8");和/或其他会导致Yahoo! TM出现在SERVLET输出中?
经过大量的反复试验,我仍然无法弄清楚问题.JSP,servlet和数据库都被设置为接受UTF-8编码,但即使我在任何具有任何双字节字符的东西上使用request.getParameter,如em dash,它们也会被破坏为字符.
我已经手动提交数据库,它能够接受这些字符,没问题.如果我从servlet中的数据库中提取文本并将其打印在我的jsp页面的表单中,则显示没有问题.
唯一一次,当我尝试在使用request.getParameter检索它之后尝试将其显示在其他地方时,它发现它作为已损坏的字符返回.
有没有其他人有这个问题?我该如何解决?
在我试图帮助的网站上,用户可以在浏览器中输入一个URL,如下面的汉字,
  http://localhost:8080?a=??
在服务器上,我们得到
  GET /a=%E6%B5%8B%E8%AF%95 HTTP/1.1
如您所见,它是UTF-8编码,然后是URL编码.我们可以通过在Tomcat中将编码设置为UTF-8来正确处理.
但是,有时我们在某些浏览器上获得Latin1编码,
  http://localhost:8080?a=ß
变成
  GET /a=%DF HTTP/1.1
无论如何在Tomcat中正确处理这个问题?看起来服务器必须做一些智能猜测.我们不希望100%正确处理Latin1,但是假设一切都是UTF-8,那么任何东西都比我们现在做的要好.
服务器是Tomcat 5.5.支持的浏览器是iPhone 6 +,Firefox 2+和iPhone上的Safari.
我正在使用java servlet为我的课程构建一个Web应用程序.在某些时候,我想重定向到一个jsp页面,发送一些想要在那里使用的信息(使用GET方法).在我的servlet中,我有以下代码:
String link = new String("index.jsp?name="+metadata.getName()+"&title="+metadata.getTitle());
response.sendRedirect(response.encodeRedirectURL(link));
在jsp中,我使用了这些参数
<%
request.getParameter("name");
request.getParameter("title");
%>
一切正常,除非参数不包含拉丁字符(在我的情况下,它们可以包含希腊字符).例如,如果name =ΕΡΕΥΝΑΣ我得到名字=¡¥.如何解决此编码问题(将其设置为UTF-8)?是不是encodeRedirectURL()做这个工作?我应该在某个时候使用encodeURL()吗?我尝试了最后一个,但问题仍然存在.
提前致谢 :)
我在eclipse juno中有一个webapp - 当我在服务器上运行时运行正常 - 在eclipse的浏览器(我在Windows上)或在FF中.
右键单击> 导出war >将其转储到$ CATALINA_HOME/webapps>一切正常(解压缩好了)EXCEPT
我的自定义标签 - 我有一个WEB-INF\functions.tld显然没有读过的文件.自动生成的eclipse server.xml(在Servers项目中)和默认的Tomcat 之间的唯一区别server.xml是:
<Context docBase="ted2012" path="/ted2012" 
reloadable="true"source="org.eclipse.jst.jee.server:ted2012"/>
source是WTP特定属性.
我设法解决了 - 看我的答案
问题:
web.xml?(在我的回答中解决,应该是另一个问题)代码在github中 - 在文件INSTRUCTIONS.txt中有详细的说明来设置项目并重现我在下面的答案中描绘的错误.
Tomcat 7.0.32,eclipse 4.2,java 1.7.9
我正在使用GlassFish 4,我的JSP文件很简单:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <%= request.getParameter("a") %>
    </body>
</html>
这是我的要求GET index.jsp?a=??,输出是:
åå² 
它出什么问题了?