全面分析Java相关的“编码”问题本文说明Java程序员遇到的一个很头痛的问题就是编码问题
一旦开发与系统平台及网络相关的程序而需要传输中文字符时,若不能正确掌握编码的知识,将频频出现乱码问题而扰乱开发计划
目前已经存在大量的关于编码问题的讲解
个人觉得这些文档主要是教“怎样解决目前问题”而非“为什么有这个问题”
希望本文能够帮助读者从根本上了解编码原理,以及软件开发过程中出现乱码的原因,而非仅仅是解决某个具体问题
字符集与编码标准字符集UNICODE从概念上讲,字符集并不完全等同与编码标准,这两个概念的区别很模糊
(未经过文献证实,只是以掌握的知识这么认为)
大家都清楚Java使用的是UNICODE字符集
请注意这里使用的是“字符集”关键字
下面以UNICODE为例浅谈字符集与编码标准
UNICODE是一套字符集而非编码标准
UNICODE字符集并非一直不变,目前流行使用的版本是使用2个字节来存储理论数量为256x256=65535(个)的字符集
两个字节能表示的范围也就是这个数字,以16进制表示就是0x0000-0xFFFF
这65535(个)已经足够收录目前世界上主要语言的大多数字符了,保证日常通信是没问题的
最新的UNICODE标准已经可以支持几百万个字符了,当然随之而来的则是一个字符占用的字节数将更大
在目前使用的JRE版本中,一个中文字符是使用两个字节的内存空间来存储的
在Java中测试UNICODE的相关功能是非常容易的:首先是查看一个中文字符的UNICODE编码值(特别注意,这里指的是字符集中一个字符所代表的数字,它是存放在内存中的)
运行如下代码将可以得到:charch1='汉';intnch1=(int)ch1;System
println("汉:"+Integer
toHexString(nch1));运行结果为:汉:6c4