与get方法提交表单(我不能使用POST方法),当我面对一个参数编码的问题。 有些加重字符没有在URL中逃了出来,因为我的页面UTF8。 春季控制器检索坏字符,而不是。
我通过设置解决了这个问题, accept-charset="ISO-8859-1"
我的表上,但现在,我不知道该字符集为所有服务器/浏览器组合的安全性。 是否有任何建议对我的形式和“得到”的网址?
与get方法提交表单(我不能使用POST方法),当我面对一个参数编码的问题。 有些加重字符没有在URL中逃了出来,因为我的页面UTF8。 春季控制器检索坏字符,而不是。
我通过设置解决了这个问题, accept-charset="ISO-8859-1"
我的表上,但现在,我不知道该字符集为所有服务器/浏览器组合的安全性。 是否有任何建议对我的形式和“得到”的网址?
这是令人沮丧的(说得客气一点)使用Servlet。 标准的URL编码必须使用UTF-8还SERVLETS不仅默认为ISO-8859-1,但不提供任何方法来改变这种代码。
当然,你可以req.setRequestEncoding("UTF-8")
你读任何东西之前,但由于某种原因敬虔这只会影响请求主体,而不是查询字符串参数。 没有什么在servlet请求接口指定用于查询字符串参数的编码。
使用ISO-8859-1
在您的形式是一个黑客。 使用这种古老的编码会造成比解决肯定更多的问题。 特别是因为浏览器不支持ISO-8859-1,总是把它与Windows 1252。 而servlet的处理ISO-8859-1 ISO-8859-1,所以你会超越信仰,如果你这个去拧。
为了在例如Tomcat改变这种情况,你可以使用URIEncoding
在你的属性<connector>
元素:
<connector ... URIEncoding="UTF-8" ... />
如果不使用具有这些设置的一个容器,不能改变其设置或一些其他的问题,你仍然可以让它工作,因为ISO-8859-1解码保留了原始二进制的全部信息。
String correct = new String(request.getParameter("test").getBytes("ISO-8859-1"), "UTF-8")
所以我们可以说test=ä
,如果一切设置正确,浏览器编码作为test=%C3%A4
。 你的servlet将它错误地解码为ISO-8859-1,给你生成的字符串"ä"
。 如果你申请的修正,就可以得到ä
回来:
System.out.println(new String("ä".getBytes("ISO-8859-1"), "UTF-8").equals("ä"));
//true
nickdos是正确的。 这样做的另一种方法是使用元数据标签:
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
同时请记住处理服务器上的响应时,代码也应该使用正确的(相同的)编码。
例:
使用stringParamer.getBytes("utf-8") instead of stringParamer.getBytes()
并使用Spring确保正确的编码,配置DispatcherServlet的配置文件(XYZ_-servlet.xml中)在信息转换器时,如:
<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value = "text/plain;charset=UTF-8"/>
</bean>
问题是URL总是得到编码为127-ASCII。 因为你的形式发回通过GET设置标准ASCII以外的其他字符值,你必须要在几个问题上:
我建议你删除的形式编码,使用网页更广泛的字符支持UTF-8的设置,并在这两个元标记低于以确保您发送回UTF-8编码的数据,其中包括所需的所有文字,很容易解码如由其他海报以上上述服务器上。
<meta charset="utf-8" />
<meta content="text/html; charset=utf-8" http-equiv="content-type" />