Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2316170
  • 博文数量: 252
  • 博客积分: 5472
  • 博客等级: 大校
  • 技术积分: 3107
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-17 18:39
文章分类

全部博文(252)

文章存档

2012年(96)

2011年(156)

分类: Java

2011-12-16 14:22:13

Java语言中 不同字符集编码的转换 都是通过Unicode编码作为中介来完成的 例如 GBK编码的字符“中”要转换为ISO-8859-1编码 其过程如下:
[1] 因为在Java中的字符 都是Unicode来表示的 所以GBK编码的字符“中”要转换为Unicode表示:
0xD6D0->0x4E2D
[2] 将字符“中”的Unicode编码转换成ISO-8859-1编码 因为Unicode编码0x4E2D在ISO-8859-1中没有对应的编码 于是得到0x3f  也就是字符 “?”
 
代码演示过程
  1. //GBK编码的字符“中”转换为Unicode编码表示

  2. String str="中"
  3. //将字符“中”的Unicode编码转换为ISO-8859-1编码

  4. byte[] b=str.getBytes("ISO-8859-1");

  5. for(int i=0;i<b.length;i++)
  6. {
  7. //输出转换后的二进制代码

  8.  System.out.println(b[i]);
  9. }

 

从其他字符集向Unicode编码转换时 如果这个二进制数在该字符串中没有标识任何的字符 则得到的结果是0xfffd

例如 一个GBK的编码值是0x8140 从GB2312向Unicode转换 然而 由于0x8140不在GB2312字符集的编码范围(0xa1a1-0xfefe) 当然也就没有对应任何的字符 所以转换后会得到0xfffd 

代码演示过程:

 

  1. //构造一个二进制数据

  2. byte[] buf={(buf)0x81,(buf)0x40,(buf)0xb0,(buf)0xa1};
  3. //将二进制数据按照GB2312向Unicode编码转换

  4. String str=new String(buf,"GB2312");
  5. for(int i=0;i<str.length();i++)
  6. {
  7. //取出字符串中的每个Unicode编码的字符

  8. char ch=str.charAt(i);
  9. //将该字符对应的Unicode编码以十六进制的形式输出

  10. System.out.print(Integer.toHexString((int)ch));
  11. System.out.print("--");
  12. //输出该字符

  13. System.out.print(ch);
  14. }

 

 

阅读(5010) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~