乱码问题,解决办法不一定是”统一所有编码”

来源:互联网 发布:淘宝升钻有什么好处 编辑:程序博客网 时间:2024/06/10 18:15

2017.5.28

      笔者在论坛上看到过这样的帖子,引用一下原文:

看到乱码,一般不想回答,因为问这个问题的人太多了,但是还是忍不住说几句吧。

1. 项目决定用 UTF-8
2. 程序的源码要用 UTF-8(Java,HTML)
3. HTML 的 meta 里要指定用 UTF-8
4. 数据库用 UTF-8
5. 数据库和 Java 的连接用 UTF-8
6. Tomcat 的 Get 设置为用 UTF-8

其他的暂时想不起来的,只有这些都用了 UTF-8,那么才不会出现乱码,如果中间有某一个没有使用 UTF-8,都有可能会遇到乱码。

      笔者虽见识肤浅,但对以上观点深不以为然。之所以很多人强调编码一致,其实是为了避免转码错误的风险,这是一种很保险的做法。个人认为,并不是说必须编码一致,才能保证不出现编码乱码的问题。其实,未必要全部用utf-8或者全部用gb18030下面请听笔者婉婉道来。

       笔者在设计自己的bbs的时候,就遇到了一个问题。

---------------乱码问题详述,可跳过--------------------------------------------------

        我想实现一个功能:注册的时候,鼠标离开文本框,用JavaScript的函数检查文本框内容的长度以及是否为空,并根据函数返回的结果,提示用户进行操作。这个提示用户进行操作的元素是一个id=pwdv”的span元素,JavaScript里面写的语句是:document.getElementById("pwdv").innerHTML="密码不能少于六位";  

我发现,只有当pageEncoding为utf-8的时候,这个span元素显示的中文文本才能正确显示。(可能和innerHTML默认编码为utf-8有关)。所以我果断把pageEncoding设置成了utf-8。

--------------------------------------------------------------------------------------------------

       那么,问题来了。当我插入注册信息到数据库的时候,数据库是乱码的,于是我在后台打印出了数据,发现也是乱码的,也就是说,编码为utf-8的页面传递表单给编码为gb18030的页面时,出现了乱码。(为帮助理解下文的解决方法,请记住这句话,是从utf-8页面传到GB18030页面)而我的数据库编码是gb18030,我的java连接数据库编码也是gb18030,难道我要为了这个javaScript能正常运行而改变我其他的所有编码吗?!除了统一编码,还有其他可能吗?

       这个时候我开始了各种尝试。

       第一种方法。是把传递过来的参数重新编码成gb18030,假设传递过来的参数叫做insert_name。

        insert_name=new String(insert_name.getBytes("utf-8"),"GB18030");

        结果:依然乱码,之前的乱码是“濂�”,现在是“ç”·”。

        QWQ,不要放弃,再来。有一种坚强叫“第二种方法”。(强行文艺)

      第二种方法。在编码为gb18030的页面,告知编译器,传递参数的页面是用的utf-8。我只用了一条语句:

        request.setCharacterEncoding("utf-8");

       结果:问题轻松解决。这个时候,无论后台还是数据库,都没有乱码,而且,最重要的是,一个页面是用的utf-8,另一个页面是用的gb18030 !这说明并不一定要统一编码才能解决乱码问题,只要跟编译器说清楚,你每个页面是用的什么编码就行了!

       最后,感谢围观~

        希望有所帮助~


阅读全文
1 0
原创粉丝点击