来源:http://aayy520.blog.163.com/blog/static/2318226020118675028822/
一、先来看一些有趣的字符编码转换
代码
|
以GBK格式保存 |
以UTF-8格式保存 |
String str = "cn中国"; |
|
|
java.net.URLEncoder.encode(str, "iso-8859-1") |
cn%3F%3F |
cn%3F%3F |
java.net.URLEncoder.encode(str, "gbk") |
cn%D6%D0%B9%FA |
cn%D6%D0%B9%FA |
java.net.URLEncoder.encode(str, "utf-8") |
cn%E4%B8%AD%E5%9B%BD |
cn%E4%B8%AD%E5%9B%BD |
new String(str.getBytes(),"iso-8859-1") |
cn???ú |
cn?????? |
new String(str.getBytes(),"gbk") |
cn中国 |
cn涓浗 |
new String(str.getBytes(),"utf-8") |
cn?й? |
cn中国 |
JavaScript
|
|
escape('cn中国') |
cn%u4E2D%u56FD |
encodeURI('cn中国') |
cn%E4%B8%AD%E5%9B%BD |
encodeURIComponent('cn中国') |
cn%E4%B8%AD%E5%9B%BD |
二、Encoding与contentType乱码
1,JSP文件中的Encoding与contentType的区别:
Encoding:该JSP文件保存时所用的编码。
contentType:该文件从服务器发送给客户端时的编码(gbk,utf-8均可正确显示)。
两种编码可以不同。
常见设置:
Encoding="utf-8" contentType="text/html;charset=utf-8"
2,初学者可能喜欢用记事本、EditPlus进行编写JSP文件,在 windows系统上默认保存格式是gbk的,如果Encoding设置成了utf-8,那就会有乱码。解决办法就是先打开记事本,然后以UTF-8的格 式打开JSP文件,删除掉乱码即可;或拷贝到MyEclipse中进行修改。
三、contentType导致form,herf提交乱码
表单提交方式 "cn中国"
|
ContentType
|
TCP Monitor监测到的数据
|
FORMGET方式 |
UTF-8 |
cn%E4%B8%AD%E5%9B%BD |
GBK |
cn%D6%D0%B9%FA |
FORMPOST方式 |
UTF-8 |
cn%E4%B8%AD%E5%9B%BD |
GBK |
cn%D6%D0%B9%FA |
超链接方式 |
UTF-8 |
cn涓浗 |
GBK |
cn中国 |
和第一张表对应着看,是不是发现了一些规律!
(一)FORM
FORM表单的编码方式与JSP中contentType的设置有关,GBK编码成GBK,UTF-8编码成UTF-8。这时,当我们在后台取回表单数据的时候,要对应的设置与表单所在页面的contentType格式。简单点说:格式要一一对应。
解决方案:
request.setCharacterEncoding("GBK");或者
request.setCharacterEncoding("UTF-8");
(二)超链接
那么对于超链接呢?对应着看第一张表的倒数第二行。我们传递的数据按new String(str.getBytes(),"gbk")方式进行了解码。如果前台的contentType正好是GBK,那么提交到后台的数据无需解码了。但如果是UTF-8那就要还原成我们原来的编码格式(被解码过了)。
String str = new String(str1.getBytes("gbk"));
这样就可以取回原来的值。
这里值得一提的是:
String str1 = new String(str.getBytes("gbk")); //这是按GBK方式编码
String str2 = new String(str1.getBytes(),"gbk"); //这是按GBK方式解码
所以大家要记牢两者的区别,以免在解码的时候又编码了一次,很难被发现。
实际上,在处理这类URL自带中文的情况下,一般使用
java.net.URLEncoder.encode(str, "utf-8")或JS中的encodeURI('cn中国')
进行URL编码,这样我们的后台程序可以使用同一种方法进行解码了。
例如,常见的用户登录失败,我们给用户一个提示信息:
String url = java.net.URLEncoder.encode("login.jsp?error=密码不正确","utf-8");
response.sendRedirect(url);
这样在前台页面:
request.setCharacterEncoding("UTF-8");
之后就可以取出error中的内容,直接显示了。
四、AJAX乱码
AJAXGET方式 |
cn中国 |
AJAXPOST方式 |
cn涓浗 |
有了上面的解决超链接方式乱码的经验,这个解决起来就简单了。请参看上面所述超链接乱码解决方案。
五、JQuery中的AJAX乱码
JQueryGET方式[非URL拼接] |
cn%E4%B8%AD%E5%9B%BD |
JQueryPOST方式 |
cn%E4%B8%AD%E5%9B%BD |
还是JQuery厚道啊!汉字已经按FORM表单的URL进行了编码,解决起来很容易。请参见FORM表单乱码解决方案。
六、MYSQL乱码
解决MYSQL乱码有三点,说一下:
1,在安装的时候选那个“日本话”那个选项,这样才能支持中文。
2,请不要使用navicat来创建数据库,它默认的还是拉丁文。请手写SQL建库语句,并设置编码。
3,创建表的时候要选UTF8,另外字段也要选UTF8编码
分享到:
相关推荐
这是一个URL编码转码工具,具体的功能和演示不发了。 实际功能是把网址转换为%hex 的形式。 1. 这个曾经是安全领域涉及到SQL注入破解屏蔽字符串的方法之一,但是现在已经很少用了 2. 这曾经是入侵大型网站(特别是...
iconv编码转码工具
FD转码器
对于利用struts框架,可以实现国际化,更好的转码工具,会帮助你很多哦。有各种工具,可以直接输入转码,也可以文件方式转码。
音视频实时编码、离线转码、收录,实时编码方面,支持网络、采集卡等多种输入,输出方面支持HLS,HTTP渐进下载,UDP等,离线转码方面支持通过web实现媒体的上下载,支持大文件,支持丰富的输入输出格式。可用于音...
utf8和gbk文件编码一键转换工具
适应于各种各样代码转码。 ASCII码、区位码、GB2312码,BIG-5码,GB内码,UNICODE码,UTF-8码,UTF-16码,二进制,八进制,十进制,十六进制。
FFmpeg系列,之前有发过一部分,但并未系列总结性将功能展现,目前按序号,将常用的发上来,VC2010环境下
Compressor 4.6.4 更新内容: 自动将视频居中裁剪为正方形、竖向或自定大小,同时保持原始高度。 使用标准键盘快捷键从“访达”拷贝文件并粘贴到批处理窗口。 使用额外音轨创建补充 IMF 项目包,或者在标准批处理中...
GBK与UTF编码批量转码工具,可以用于DZ论坛和PHPWIND论坛模板和插件GBK,UTF之间的转码。
软件介绍: 曼彻斯特编码解码器包含转换模式:802.3曼彻斯特、标准曼彻斯特、差分、曼彻斯特编码是否进行每8位反序解码(特殊情况)解码操作按照1-2-3的顺序进行。
文字编码转换工具
一、Python字符编码介绍 1、须知: 在python 2中默认编码是 ASCII,而在python 3中默认编码是 unicode unicode 分为utf-32 (占4个字节),utf-16(占两个字节),utf-8(占1-4个字节),所以utf-16 是最常用的unicode版本...
小程序接收蓝牙设备发送的信息,但是蓝牙设备发送的是gb2312编码的arryBuffe,将发送的含中文编码转码成字符串,一直乱码。 原因 乱码的原因是编码方式不同,小程序显示的是utf-8编码,而蓝牙设备发送的是gb2312...
NULL 博文链接:https://tristan-s.iteye.com/blog/1399302
它旨在为在node.js中构建视频转码软件提供一个精简而稳定的基础。 HandBrake是一种用于将视频从几乎任何格式转换为广泛支持的现代编解码器的工具。 它可以处理最常见的多媒体文件以及不包含任何复制保护的任何DVD...
该工具系ECSHOP所有网站编码转码工具。
unicode 转码器 编码转换 utf8
转码小工具 utf8 和gb2312 互转
使用 keil(MDK) 的代码编辑器编辑时,如今 UTF-8 的编码格式已经成为主流,特别是 MDK 使用 AC6 的时候值支持 UTF-8 的编码,所以之前很多一些非 UTF-8 的文件我们就主要转换成 UTF-8 的编码格式,转换文件编码格式的...