Java语言中 不同字符集编码的转换 都是通过Unicode编码作为中介来完成的 例如 GBK编码的字符“中”要转换为ISO-8859-1编码 其过程如下:
[1] 因为在Java中的字符 都是Unicode来表示的 所以GBK编码的字符“中”要转换为Unicode表示:
0xD6D0->0x4E2D
[2] 将字符“中”的Unicode编码转换成ISO-8859-1编码 因为Unicode编码0x4E2D在ISO-8859-1中没有对应的编码 于是得到0x3f 也就是字符 “?”
代码演示过程
- //GBK编码的字符“中”转换为Unicode编码表示
- String str="中";
- //将字符“中”的Unicode编码转换为ISO-8859-1编码
- byte[] b=str.getBytes("ISO-8859-1");
- for(int i=0;i<b.length;i++)
- {
- //输出转换后的二进制代码
- System.out.println(b[i]);
- }
从其他字符集向Unicode编码转换时 如果这个二进制数在该字符串中没有标识任何的字符 则得到的结果是0xfffd
例如 一个GBK的编码值是0x8140 从GB2312向Unicode转换 然而 由于0x8140不在GB2312字符集的编码范围(0xa1a1-0xfefe) 当然也就没有对应任何的字符 所以转换后会得到0xfffd
代码演示过程:
- //构造一个二进制数据
- byte[] buf={(buf)0x81,(buf)0x40,(buf)0xb0,(buf)0xa1};
- //将二进制数据按照GB2312向Unicode编码转换
- String str=new String(buf,"GB2312");
- for(int i=0;i<str.length();i++)
- {
- //取出字符串中的每个Unicode编码的字符
- char ch=str.charAt(i);
- //将该字符对应的Unicode编码以十六进制的形式输出
- System.out.print(Integer.toHexString((int)ch));
- System.out.print("--");
- //输出该字符
- System.out.print(ch);
- }
阅读(5057) | 评论(0) | 转发(0) |