当前位置: 首页 > news >正文

编码 转码

来源:http://aayy520.blog.163.com/blog/static/2318226020118675028822/

一、先来看一些有趣的字符编码转换  

代码以GBK格式保存以UTF-8格式保存
String str = "cn中国";  
java.net.URLEncoder.encode(str, "iso-8859-1")cn%3F%3Fcn%3F%3F
java.net.URLEncoder.encode(str, "gbk")cn%D6%D0%B9%FAcn%D6%D0%B9%FA
java.net.URLEncoder.encode(str, "utf-8")cn%E4%B8%AD%E5%9B%BDcn%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监测到的数据
FORM  GET方式UTF-8cn%E4%B8%AD%E5%9B%BD
GBKcn%D6%D0%B9%FA
FORM  POST方式UTF-8cn%E4%B8%AD%E5%9B%BD
GBKcn%D6%D0%B9%FA
超链接方式UTF-8cn涓浗
GBKcn中国

和第一张表对应着看,是不是发现了一些规律!

(一)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乱码

 

AJAX  GET方式cn中国
AJAX  POST方式cn涓浗

 

有了上面的解决超链接方式乱码的经验,这个解决起来就简单了。请参看上面所述超链接乱码解决方案。

 

五、JQuery中的AJAX乱码

  

JQuery  GET方式[非URL拼接]cn%E4%B8%AD%E5%9B%BD
JQuery  POST方式cn%E4%B8%AD%E5%9B%BD

 

还是JQuery厚道啊!汉字已经按FORM表单的URL进行了编码,解决起来很容易。请参见FORM表单乱码解决方案。

 

六、MYSQL乱码

解决MYSQL乱码有三点,说一下:

1,在安装的时候选那个“日本话”那个选项,这样才能支持中文。

2,请不要使用navicat来创建数据库,它默认的还是拉丁文。请手写SQL建库语句,并设置编码。

3,创建表的时候要选UTF8,另外字段也要选UTF8编码

相关文章:

  • eclipse-helios中Errors running builder JavaScript Validator的问题
  • SSH_Secure_Shell_ClientH工具密钥登录linux
  • linux 学习(一)---vm网络共享
  • Runtime exec 执行linux find 命令时 引号问题
  • jquery 水平滚动
  • 谷歌火狐 上传图片预显示
  • linux 学习(centos)
  • paoding-rose源码(github)转eclipse项目
  • ajax 关于zepto.js 进行jsonp请求时无法得到data中的参数数据
  • springmvc jsp 访问 (tomcat)
  • paoding-rose 框架BaseDAO
  • jetty应用服务初步使用
  • centos7 Minimal +VM VirtualBox 网络链接
  • Docker fastdfs 【单机】
  • windows下java工程运行(非jar)
  • @angular/forms 源码解析之双向绑定
  • [译]如何构建服务器端web组件,为何要构建?
  • create-react-app做的留言板
  • go语言学习初探(一)
  • Intervention/image 图片处理扩展包的安装和使用
  • JavaScript 奇技淫巧
  • PhantomJS 安装
  • React中的“虫洞”——Context
  • 程序员最讨厌的9句话,你可有补充?
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 回流、重绘及其优化
  • 基于HAProxy的高性能缓存服务器nuster
  • 前端攻城师
  • 前端知识点整理(待续)
  • 使用Gradle第一次构建Java程序
  • 算法系列——算法入门之递归分而治之思想的实现
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 我建了一个叫Hello World的项目
  • 赢得Docker挑战最佳实践
  • 原生js练习题---第五课
  • 怎么把视频里的音乐提取出来
  • raise 与 raise ... from 的区别
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (14)Hive调优——合并小文件
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (利用IDEA+Maven)定制属于自己的jar包
  • (转)编辑寄语:因为爱心,所以美丽
  • *p++,*(p++),*++p,(*p)++区别?
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .chm格式文件如何阅读
  • .htaccess配置重写url引擎
  • .NET MVC第五章、模型绑定获取表单数据
  • .Net Web项目创建比较不错的参考文章
  • .netcore 获取appsettings
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理