Entries RSS

Irritating Charset

2008 Oct 22

页面编码是有头部的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 %> 俄文

No Comment. Write me!

Post a Comment

Your email is never shared. Required fields are marked *

*
*