|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
发信人: cloudor (大功即将告成!!!), 信区: Java
标 题: Re: 关于编码的思考
发信站: BBS 水木清华站 (Mon Nov 18 08:50:51 2002), 转信
在java里,所有char和String都是用unicode/ucs保存的,
当数据读入时指定encoding,那么编译时进入class文件或者
运行时进入内存都会自动实现转换.
同理在输出时指定encoding也会实现转换.
但要注意的是,big5和gb2312的确有在unicode/ucs中同样
的字符,比如"他""什""中""台"等非常简单因此没有被简化
的汉字.而ISO8859-1和两者只有ascii部分有相同字符.一个
字符假如不在一个字符集中(反正不可能是unicode),那么编码
就会出错,就用"?"来表示.
文末范例程序在编译时(GB18030环境)将"123abc中学學"以unicode保存
在class文件中,运行时用"UTF-8""GB2312""GBK""BIG5""ISO8859-1"
输出相应encoding/charset里的字节.
结果如下:
========================
original String:123abc中学學
UTF-8:
31 32 33 61 62 63 e4 b8 ad e5 ad a6 e5 ad b8
GBK:
31 32 33 61 62 63 d6 d0 d1 a7 8c 57
GB2312:
31 32 33 61 62 63 d6 d0 d1 a7 3f
BIG5:
31 32 33 61 62 63 a4 a4 3f be c7
ISO8859-1:
31 32 33 61 62 63 3f 3f 3f
========================
其中3f就是'?',中文字在ISO8859-1里不支持,而'学'字在big5里不支持,
'學'字在gb2312里不支持。
而UTF-8和GBK则都支持。
源程序:
- //: TestConv.java
- public class TestConv
- {
- public static void main(String[] args)
- {
- String s = "123abc中学學";
- String[] encodings = {
- "UTF-8",
- "GBK",
- "GB2312",
- "BIG5",
- "ISO8859-1"
- };
- System.out.println("original String:" + s);
- for (int i = 0; i < encodings.length; i++)
- {
- byte[] b = null;
- try
- {
- b = s.getBytes(encodings[i]);
- }catch (Exception e)
- {
- System.out.print(
- "error occur: encoding-"
- + encodings[i]
- + " message:"
- + e.getMessage()
- );
- }
- System.out.print(encodings[i] + ":\n\t");
- for (int j = 0; j < b.length; j++)
- {
- System.out.print(Integer.toString((b[j]+256)%256, 16) + " ");
- }
- System.out.println();
- }
- }
- }
复制代码
【 在 hello10000 (坦言) 的大作中提到: 】
: 我想弄清楚到底编码转换是怎么回事!
: 实现多种编码之间的转换我想最方便的就是采用一种中间编码,实现每种编码与这种中间
: 编码的转换就可以在任何两种编码之间转换了。比如不管iso-8859或者gbk或者big5只要
: 都有与unicode转换接口,肯定可以很轻松在任何两种编码之间转换。如下图
: big5--|
: gb2312-|<-->unicode
: iso8859-|
: 如果直接实现任何两种编码之间的转换工作量就大多了,是不是?
: java中编码转换是不是以unicode为桥梁进行的呢?这个到桥梁的转换是不是就是通过到?
: 节流的编码与解码实现的呢?而这种字节流在java处理中都是平台使用的编码地字节流,
: 又是如何充当桥梁作用的?
: ...................
--
上上下下浇着那条毛巾,然后,我打了个冷战.
※ 修改:·cloudor 于 Nov 18 09:50:40 修改本文·[FROM: 218.17.206.116]
※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 218.17.206.116] |
|