今天做项目的时候,通过简单的查询数据库来实现搜索操作,结果就在令人激动的一刻,碰到了万恶的乱码
不得不说,中文乱码一直是个让人头疼的问题
当我输入中文搜索时,在我的调试数据中显示出了乱码
碰到这个乱码我的第一反应是数据库乱码,这里我用的是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; } }
最后问题成功解决