简单谈谈字符编码规则_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 简单谈谈字符编码规则

简单谈谈字符编码规则

 2012/6/18 16:28:06  nanapoleon  程序员俱乐部  我要评论(0)
  • 摘要:先吐槽一下!你妹java核心技术卷2第八版,说是在卷一12章有字符编码的教程,书没买,那就下呗,找了半天下了个卷一,一看,12章哪来的字符编码???网上找了下,也没有改良utf-8的信息!好吧,最后,抱着试一试的心态,下了个卷一第七版,果然啊,在这里头,不带这样的吧。。。没事搞什么穿越啊。。。以上各位亲如果有兴趣,可以了解一下,各种坑啊,别和我一样悲剧找半天。好!今天呢,就给大家科普一下!讲得好,有钱的捧个钱场!没钱的转发一下!--在很早以前,大家知道有一个叫ASCII码的东西
  • 标签:编码
    先吐槽一下!你妹java核心技术卷2第八版,说是在卷一12章有字符编码的教程,书没买,那就下呗,找了半天下了个卷一,一看,12章哪来的字符编码???网上找了下,也没有改良utf-8的信息!好吧,最后,抱着试一试的心态,下了个卷一第七版,果然啊,在这里头,不带这样的吧。。。没事搞什么穿越啊。。。以上各位亲如果有兴趣,可以了解一下,各种坑啊,别和我一样悲剧找半天。
    好!今天呢,就给大家科普一下!讲得好,有钱的捧个钱场!没钱的转发一下!- -
    在很早以前,大家知道有一个叫ASCII码的东西,他使用7位表达128种字符,英语,当然没有问题,但是,不支持我们的汉字肿么可以,于是,我们的领导表示了强烈的不满并深感遗憾。又于是,科学家们就开发出了unicode,没错,多一字节嘛,就能很轻松的兼容问题了啊。但是,科学家们表示,那我如果经常使用英语,高字节的经常性全0会白白浪费了一倍的资源,这样是不可取的,领导于是说,你要再这样说,我就,深感遗憾。
    科学家嘛,并不是都是木讷的,怎么能让领导遗憾呢?万一哪天突然走丢了呢,是吧。于是,他呕心沥血,开发出了UTF-8编码。
    UTF-8的设计有以下的多字符组序列的特质:
    *单字节字符的最高有效位元永远为0。
    *多字节序列中的首个字符组的几个最高有效位元决定了序列的长度。最高有效位为110的是2字节序列,而1110的是三字节序列,如此类推。
    *多字节序列中其余的字节中的首两个最高有效位元为10。
    如:U+00000000 – U+0000007F: 0xxxxxxx
       U+00000080 – U+000007FF: 110xxxxx 10xxxxxx
       U+00000800 – U+0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
    可变长了,有木有?领导高兴了,有木有?想感谢郭嘉了,有木有?
    其实呢,在java内部,是使用UTF-16的形式存储字符的,这样是很简单的。
    但是呢,根据上节所说,在jni下面,有两种编码:“改良的UTF-8”和UTF16。UTF16就是双字节的unicode很好懂了,不需要解释。
    那改良的UTF-8呢?根据该死的第七版的卷一12章所说,我们在需要向文件写数据时,会使用DataOutput的方法,如writeInt,会写入一个4字节的二进制数。不过,其中有一个方法writeUTF,比较特殊,此方法使用“改良的UTF-8”来写入字符串数据,与标准的UTF-8不同,字符组成的字符串先用UTF-16表示,随后的结果采用UTF-8规则编码。对于高于0xffff的字符来说,改进的编码是不同的。这是为了能够同Unicode代码还没有增长到16位时的虚拟机向后兼容。
    由于没有人使用改进的UTF-8代码,所以只能使用writeUTF方法来写字符串以供给java虚拟机使用,例如,要写一个产生字节码的程序。使用writeChars方法用于其他目的。
    ok,插曲完毕,后面的文章,会继续jni的内容。
发表评论
用户名: 匿名