Java UTF-8编码和http参数
我正在使用YahooUI Javascript库执行一个简单的ajax调用,如下所示:Java UTF-8编码和http参数,java,utf-8,character-encoding,Java,Utf 8,Character Encoding,我正在使用YahooUI Javascript库执行一个简单的ajax调用,如下所示: YAHOO.util.Connect.setForm('myform'); YAHOO.util.Connect.asyncRequest('POST', url, ...); 以下是我的应用程序中的设置: Tomcat版本:6.0.18 Tomcat服务器连接器:URIEncoding=“UTF-8” 网络应用程序页面: YahooUI连接器库文档中也有说明: setForm将对每个HTML表单进行编码
YAHOO.util.Connect.setForm('myform');
YAHOO.util.Connect.asyncRequest('POST', url, ...);
以下是我的应用程序中的设置:
Tomcat版本:6.0.18
Tomcat服务器连接器:URIEncoding=“UTF-8”
网络应用程序页面:
YahooUI连接器库文档中也有说明:
setForm将对每个HTML表单进行编码
字段的名称和值使用
编码元件。这导致了
UTF-8编码的字符串,名称值
对。注意:设置的HTTP头
“内容类型”具有不同的
字符集值不会更改
序列化数据的编码。序列化数据的编码
我可以看到作为参数发送的法语字符是经过编码的(在ie7中使用iehttpheader工具):
有关数据:
姓名:ÈÈ
和testParam:
但在服务器端,我看到的值如下:
Ã
即使我将字符串转换为字节,然后使用如下定义的字符集创建新字符串:
String val=新字符串(oo.getBytes(“UTF-8”);
我无法获得预期的准确数据
注意:我引用了下面的问题,但无法解决此问题:请指导
更新:
调用W3.org网站上给出的decode UTF-8函数可以得到预期的结果。我希望Tomcat能够解码这个?因为您使用的是
POST
查询,URIEncoding=“UTF-8”
在这里不适用。您需要设置一个过滤器来告诉Tomcat您的请求编码是UTF-8。例如,您可以使用Spring的字符编码过滤器
(,)。还可以找到此类过滤器的其他实现。是的,这里有一个:
package com.lfantastico.web;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class EncodingFilter implements Filter {
private String encoding = "UTF-8";
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
public void init(FilterConfig config) throws ServletException {
if (config.getInitParameter("encoding") != null) {
encoding = config.getInitParameter("encoding");
}
}
}
是的,这是有效的-我必须确保我应用的过滤器(SetCharacterEncodingFilter-可在tomcat示例文件夹中找到)必须是在我的其他过滤器之前调用的第一个过滤器,并且它有效!。谢谢:)这里是另一个使用链接,因为上面的链接似乎已断开:
package com.lfantastico.web;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class EncodingFilter implements Filter {
private String encoding = "UTF-8";
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
public void init(FilterConfig config) throws ServletException {
if (config.getInitParameter("encoding") != null) {
encoding = config.getInitParameter("encoding");
}
}
}