乱码问题,解决办法不一定是”统一所有编码”
2017-05-28 17:19
381 查看
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. 项目决定用 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 !这说明并不一定要统一编码才能解决乱码问题,只要跟编译器说清楚,你每个页面是用的什么编码就行了!
最后,感谢围观~
希望有所帮助~
相关文章推荐
- UTF-8在IE中不能自动选择编码的解决办法(utf8 网页在ie中自动编码乱码问题)
- 【PHP问题大全】--PHP连接MySQL出现乱码的编码解决办法
- 【MySQL】统一控制台-pma-PHP编码!解决中文乱码问题
- 【MySQL】统一控制台-pma-PHP编码!解决中文乱码问题
- Linux下因为系统编码问题造成乱码的解决办法
- 解决中文乱码问题,三处位置编码必须统一
- IE8下utf-8编码页面乱码问题解决办法
- Android Studio编译时编码(乱码)问题的解决办法
- foxmai收件箱所有邮件乱码问题解决办法
- ubuntu系统下gedit 打开GBK字符集编码文件出现乱码问题解决办法
- linux下由于系统编码问题造成乱码的解决办法
- linux下由于系统编码问题造成乱码的解决办法
- ubuntu系统下gedit 打开GBK字符集编码文件出现乱码问题解决办法
- android POST数据遇到的UTF-8编码(乱码)问题解决办法
- UTF-8编码主页调用JS显示乱码问题解决办法
- linux下由于系统编码问题造成乱码的解决办法
- mysql和myelipse乱码解决办法-----推荐统一编码格式保持良好习惯
- 聊聊计算机中的编码(Unicode,GBK,ASCII,utf8,utf16,ISO8859-1等)以及乱码问题的解决办法
- 聊聊计算机中的编码(Unicode,GBK,ASCII,utf8,utf16,ISO8859-1等)以及乱码问题的解决办法
- Eclipse RCP 中使用UTF8编码出现乱码问题的解决办法