中文乱码处理

由于编码方式的不同,各种编码处理的语言不通,将导致中文乱码问题:

一、几种常见的编码方式:

1、ISO-8859-1:属于单字节编码,最多表示的字符范围是0-255,应用于英文系列。

2、GB2312/GBK:属于汉字的国标码,专门表示汉字,是双字节编码,还兼容ISO-8859-1编码,其中GBK同时表示繁体字和简体字,而GB2312只能表示简体字。

3、Unicode:属于同一编码,可以表示所有语言的字符,但它是定长双字节编码,故不兼容ISO-8859-1编码。

4、UTF-8:Unicode编码不兼容ISO-8859-1,而且占用空间更多,不便于传输和存储,UTF-8兼容ISO-8859-1而且表示所有语言字符。

二、产生乱码的几种原因:

1、在JSP编译成class文件时,如果没有指定编码格式,系统默认的编码格式为ISO-8859-1。

2、表单通过POST方法提交,未指定提交编码格式,则会默认ISO-8859-1编码提交。

3、表单通过GET方法提交,Tomcat会以默认的(ISO-8859-1)编码格式,追加到URL上,将导致乱码。

三、解决方法:

1、连接数据库时,指定编码格式:jdbc:mysql://localhost:3306/test&useUnicode=true&characterEncoding=UTF-8;

2、通过设置接收和响应的编码格式:request.setCharacterEncoding("GBK");response.setContentType("text/html;charset=GBK");

3、通过过滤器设置,其实这个和第二种是同样的道理的:

package com.song.EncodingFilter;

import java.io.*;
import javax.servlet.*;

public class EncodingFilter implements Filter{

	private String encoding = null;
	private FilterConfig config = null;

	public void destroy(){
		this.encoding = null;
		this.config = null;
	}

	public void doFilter(ServletRequest req,
						ServletResponse res,
						FilterChain chain)
						throws ServletException, IOException{
		String type = getEncoding(req);
		if(type != null){
			req.setCharacterEncoding(type);
		}
		chain.doFilter(req,res);
	}

	public void init(FilterConfig config)throws ServletException{
		this.config = config;
		this.encoding = config.getInitParameter("encoding");
	}

	public String getEncoding(ServletRequest req){
		return this.encoding;
	}
}
<filter>
	<filter-name>EncodingFilter</filter-name>
	<filter-class>com.song.EncodingFilter.EncodingFilter</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>GBK</param-value>
	</init-param>
  </filter>
  <filter-mapping>
	<filter-name>EncodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
  </filter-mapping>

4、因GET方式是吧参数添加到URL上,这些方法对于GET方法提交的话将不会起到作用,对于GET提交,我们可以在Tomcat的server.xml中设置编码格式:如下:

<Connector port="80" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" 

URIEncoding=“GBK”/>

还有一种就比较麻烦点了,不过使用的也挺多的:String name = new String(username.getBytes("ISO-8859-1"),"GBK");

上一篇:photoshop利用画笔及滤镜快速制作梦幻的光斑背景


下一篇:Photoshop为坐在草地的美女增加上柔和甜美的淡调红褐色