页面编码是有头部的META标签指定的。浏览器会根据设置的内容来选择编码集以显示内容。甚至,在你从一个UTF8的页面向一个GB2312的页面POST数据的时候,可能里面的东西就成为乱码了。除了统一编码之外,显然还有一些其他方法。鉴于我之前被这个搞得很郁闷,我在这里特别地汇总一下,也好让大家验证一下这些的代码。目前已知JSP、PHP、ASP的方法总结如下:
伟大(而麻烦)的JSP
第一种方法大概就是写一个过滤器:
package com.filter;
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;
import javax.servlet.http.HttpServlet;
public class PageEncodingFilter extends HttpServlet implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
}
public PageEncodingFilter() {
super();
}
public void destroy() {
super.destroy();
}
public void init() throws ServletException {
}
}
并设置web.xml文档:
<filter> <filter-name>PageEncodingFilter</filter-name> <filter-class>com.filter.PageEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>PageEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
还有一个escape()编码转换的方法:
在前台传输之前,用JS进行转换:
function enCode(chineseStr) {
return escape(chineseStr,'utf-8');
}
后台将数据作为普通字符串再进行解码为正常中文:
String XXX= getUrlParameter(unescape(request.getQueryString()),"XXX");
//如此获得的XXX即为解码后的正确的中文
public String getUrlParameter(String str,String targetstr){
String[] stringarray = str.split("&") ;
for(int i=0;i
平民PHP
PHP的方法是Blueidea里面的版主指点的,在这里共享一下。其思想主要是在传送之前转换编码:
$send = iconv("UTF-8","GB2312//IGNORE",$data)
就是这样把UTF8转换为了GB2312,PHP我爱你!
这里的“//IGNORE"是为了让PHP忽略该函数转换“—”的错误。
不过这里必须指出该函数需要libiconv的库。类似的还有mbstring库的mb_convert_encoding();
如果你倒霉到环境里什么库都没有,那么手写JSP部分的那个函数吧……
M$的ASP
Gb2312编码页面中加入
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%><%Session.CodePage=936%>
<%Response.charset = "BG2312"%>
utf-8编码页面中加入
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%Session.CodePage=65001%>
<%Response.charset = "utf-8"%>
另附一些常用的codepage:
- <%@ codepage=65001%> UTF-8
- <%@ codepage=936%> 简体中文
- <%@ codepage=950%> 繁体中文
- <%@ codepage=437 %> 美国/加拿大英语
- <%@ codepage=932 %> 日文
- <%@ codepage=949 %> 韩文
- <%@ codepage=866 %> 俄文








![[F5] Brisbane and Gold Coast Web Design, Development, Illustration and more... (20100729)](http://farm5.static.flickr.com/4120/4874414037_b26e7875d6_s.jpg)