文档章节

Java编码和servlet乱码问题(1)-Java编码

阿山du
 阿山du
发布于 2013/12/21 21:31
字数 923
阅读 124
收藏 12

    在写这边文章时,在网上扒拉了很久,发现好多博客总结的都非常好,我也是参考了很多,在文章最后会列出一些觉得不错的博客地址,大家如果有兴趣可以去看看。

    本篇主要是简单介绍Java编码知识,如果已经非常了解,可以手抖了,把宝贵时间用到看其他文章上面吧。

    大家都知道中文需要编码后传输才不会有乱码,但是为什么要编码呢,因为计算机的一个最基本的存储单元byte无法表示一个中文字符,所以我们必须先把中文字符经过转换,转换成计算机能够表示的字符。当需要重新读取这些字符时,按照之前的转换规则,再转换回来就可以了。

    这里的转换规则就是我们的所说的编码方式了,常见的有ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16等。首先我们的字符在jvm都是Unicode编码,而上面的那些编码方式就是在传输时或显示时用什么样的编码方式。比如你把字符串以UTF-8编码方式转换成Unicode编码存储,然后等再次读取的时候还是采用UTF-8编码方式来反编码,就能获取到正确的字符。因为Unicode编码采用了世界统一的码表进行编码,因此相同的字符对应不同的系统或环境对应的Unicode码是一样的。

    比如一个字符串“中国”,他的Unicode码是一定的,如果通过getBytes("GBK")方法,其中的内部逻辑就是首先“中国”的Unicode码转换成GBK编码,然后用GBK编码后的数据进行传递。当对方拿到这个字节数组以后,通过new String(recBytes,"GBK"),就能把获取到的GBK编码的字节数组用GBK编码重组后再转换成Unicode编码来存储或显示。但是对于GBK.GB2312,UTF-8等这些双字节编码而言,对中文进行编码、转码完全没有问题,只有前后的编码格式一样就可以,而ISO-8859-1这些单字节编码就不行了,因为是单字节,所以能表示的字符范围是0-255,只能对英文字符、数字等表示。比如对于“中国”,用上面的getBytes("ISO-8859-1"),这时你将得到3f,3f(3f表示?),因为ISO-8859-1没有“中国”的对应字符集,所以只好以?来表示了

    最后要说的是,实际上我们可能会跟各个渠道或设备打交道,比如浏览器、数据库、文件等,在进行转码或存储的时候,最好都指定一个固定的字符集,然后统一进行转换,就不会遇到乱码的问题。对于web项目可能遇到乱码的几率比较大,这个问题会在下一篇文章中集中分析一下。下面附上一些觉得不错的文章,不想看本文的可以直接猛击下面链接。

http://blog.csdn.net/qinysong/article/details/1179513

http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/

http://blog.sina.com.cn/s/blog_000598fc0100tvlz.html

http://www.blogjava.net/zhenandaci/category/31869.html

© 著作权归作者所有

共有 人打赏支持
阿山du
粉丝 0
博文 11
码字总数 7555
作品 0
东城
程序员
私信 提问
Tomcat中文乱码问题的原理和解决方法

Tomcat中文乱码问题的原理和解决方法   自从接触Java和JSP以来,就不断与Java的中文乱码问题打交道,现在终于得到了彻底的解决,现将我们的解决心得与大家共享。   一、Java中文问题的由...

孙斐
2013/02/26
0
0
[转]jsp编码 补充 关于JSP页面中的pageEncoding和contentType两种属性的区别

关于JSP页面中的pageEncoding和contentType两种属性的区别: pageEncoding是jsp文件本身的编码 contentType的charset是指服务器发送给客户端时的内容编码 JSP要经过两次的“编码”,第一阶段...

穿越星辰
2010/05/13
0
0
[转]jsp编码 补充 关于JSP页面中的pageEncoding和contentType两种属性的区别

关于JSP页面中的pageEncoding和contentType两种属性的区别: pageEncoding是jsp文件本身的编码 contentType的charset是指服务器发送给客户端时的内容编码 JSP要经过两次的“编码”,第一阶段...

inferrrrrr
2010/05/11
0
0
ContentType,charset和pageEncoding的区别

ContentType 属性指定响应的 HTTP 内容类型。如果未指定 ContentType,默认为 text/HTML。   语法  Response.ContentType [= ContentType ]   参数   ContentType pageEncoding是jsp...

Glogo
2013/02/19
0
0
JSP页面中的pageEncoding和contentType(charset)两种属性的区别

jsp文件中charset和pageEncoding的区别: contentType的charset是指服务器发送给客户端时的内容编码,contentType里的charset=utf-8是指示页面的输出方式为utf-8 在JSP标准的语法中,如果 pa...

chape
2013/06/19
0
1

没有更多内容

加载失败,请刷新页面

加载更多

Pycharm上Django的使用 Day8

1.添加新条目 1>编写用于添加新条目的表单 在forms.py中创建一个与模型Entry相关联的表单 1处给字段'text'指定一个空标签 2处定义小部件widgets,widgets是一个HTML表单元素 2>定义new_entry...

不会TC的猫
13分钟前
1
0
MongoDB副本集

MongoDB介绍 早期版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主 目前已经淘汰master-slave模式,改为副本集,这种模式下有一个...

chencheng-linux
26分钟前
1
0
WebService 客户端记录

https://blog.csdn.net/qiuhan/article/details/49487009

呼呼南风
26分钟前
0
0
七牛云彭垚:智能平台的创新和发展

2018 年 11 月 14 日至 11 月 18 日,第二十届中国国际高新技术成果交易会(简称高交会)在深圳成功举办,七牛云作为国内领先的以数据智能和视觉智能为核心的企业级云计算服务商受邀参展。 ...

七牛云
32分钟前
0
0
Java内存模型原理,你真的理解透彻了吗?

内存模型产生背景 在介绍 Java 内存模型之前,我们先了解一下物理计算机中的并发问题,理解这些问题可以搞清楚内存模型产生的背景。 物理机遇到的并发问题与虚拟机中的情况有不少相似之处,物...

小刀爱编程
37分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部