JSP的get方式中文乱码问题

今天做项目的时候,通过简单的查询数据库来实现搜索操作,结果就在令人激动的一刻,碰到了万恶的乱码

不得不说,中文乱码一直是个让人头疼的问题

当我输入中文搜索时,在我的调试数据中显示出了乱码

碰到这个乱码我的第一反应是数据库乱码,这里我用的是mysql


我把里面统统改成utf8,然而我重启服务器却发现,这该死的乱码还在

于是我将request.getParameter()得到的String输出,果然,问题和数据库无关,可是我已经设置了request.setCharacterEncoding("utf8")了,

于是我各种设置,将能改成utf8的编码统统改成utf8,将项目的默认编码也改成了utf8,然而这万恶的乱码就像肿瘤一样丝毫不动。

最后我发出求救,一好心的朋友给我送来了代码,能够将其他编码转化成utf8格式,我在这里分享一下代码.


package com.DAO;

import java.io.UnsupportedEncodingException;

public class Test_luanma {

	/**  
	 *  用getBytes(encoding):返回字符串的一个byte数组  
	 *  当b[0]为  63时,应该是转码错误  
	 *  A、不乱码的汉字字符串:  
	 *  1、encoding用UTF8时,每byte是负数;  
	 *  2、encoding用ISO8859_1时,b[i]全是63。  
	 *  B、乱码的汉字字符串:  
	 *  1、encoding用ISO8859_1时,每byte也是负数;  
	 *  2、encoding用UTF8时,b[i]大部分是63。  
	 *  C、英文字符串  
	 *  1、encoding用ISO8859_1和UTF8时,每byte都大于0;  
	 *  总结:给定一个字符串,用getBytes("iso8859_1")  
	 *  1、如果b[i]有63,不用转码;  A-2  
	 *  2、如果b[i]全大于0,那么为英文字符串,不用转码;  B-1  
	 *  3、如果b[i]有小于0的,那么已经乱码,要转码。  C-1  
	 */ 
	public String toUTF8(String str) {
		if (str == null)
			return null;
		String retStr = str;
		byte b[];
		try {
			b = str.getBytes("ISO8859_1");
			for (int i = 0; i < b.length; i++) {
				byte b1 = b[i];
				if (b1 == 63)
					break; // 1
				else if (b1 > 0)
					continue;// 2
				else if (b1 < 0) { // 不可能为0,0为字符串结束符
					// 小于0乱码
					retStr = new String(b, "UTF8");
					break;
				}
			}
		} catch (UnsupportedEncodingException e) {
			// e.printStackTrace();
		}
		return retStr;
	}

	

	
}


最后问题成功解决



猜你喜欢

转载自blog.csdn.net/bonsoirdave/article/details/52450106