分享

java中的编码问题

 碧海山城 2010-08-11
Java。
JVM里面的任何字符串资源都是Unicode,就是说,任何String类型的数据都是Unicode编码。没有例外。既然只有一种编码,那么,我们可以这么说,JVM里面的String是不带编码的。String相当于 char[]。

JVM里面的 byte[] 数据是带编码的。比如,Big5,GBK,GB2312,UTF-8之类的

一个GBK编码的byte[] 转换成 String,其实就是从GBK编码向Unicode编码转换

一个String转换成一个Big5编码的byte[],其实就是从Unicode编码向Big5编码转换
 
所以,Unicode是所有编码转换的中间介质。所有的编码都有一个转换器可以转换到Unicode,而Unicode也可以转换到其他所有的编码。这样构成了一个总线结构。
比如,如果总共有10种编码,那么只需要 10 + 10 = 20个转换器就够了。如果要是两两直接转换,那么,需要的转换器数量是一个组合数字,需要90个转换器。
 
如果在将Unicode转换到某一本地字符集时,发现这一编码字符集不包含这个字符,怎么办呢?例如:“我爱Abbb”这个字符串(简体中文),如果转换成繁体中文的BIG5编码,就会变成:“我?Abbb。原来,Unicode规定,转换时碰到“看不懂”的字符,一律用“?(0x3F)”表示。
 
和编码过程类似,Unicode规定,在解码时,发现“看不懂”的字节,一律用“?(0xFFFD)”表示。例如:将“我爱Abbb”以UTF-8的编码方式保存在一个文件中,用繁体中文编码BIG5读入,就会变成:“?????婢bbb
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多