Todd

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  65 随笔 :: 0 文章 :: 24 评论 :: 0 Trackbacks
程序中有汉字参数,经常会遇到编码转码问题,总结下:
1.汉字为多字节字符,须多字节编码解码,如"测试".getBytes("gb2312");

这样"测试".getBytes("gb2312")就变成一个byte数组,这时候你可以随意重新指定编码如iso-8859-1,
String s1=new String("测试".getBytes("gb2312"),"iso-8859-1");

编为s1,这是s1就变成一个是iso-8859-1编码的字符串,如果你想重新转为中文,那么,你用什么字符集编码的,必须用什么字符集来解 码,这里是iso-8859-1,可以这么来做

String s2 = new String(s1.getBytes("ISO-8859-1"),"gb2312");


这样s2又重新变回中文了,所以当你打印s2时,就是“测试”。


2.用iso-8859-1做中间编码,原因:

[1]iso-8859-1是单字节字符编码,

[2]ANSI 编码 (如:GB2312, BIG5,Shift_JIS,ISO-8859-2等等),是多字节编码(英文单字节,中文多字节);

[3]UNICODE 编码(UTF-8, UTF-7, UTF-16, UnicodeLittle, UnicodeBig....),是宽字节编码(所有字符均是多字节)

因此用iso-8859-1做中间码,会保持原有字节的秩序,不发生混乱;可以理解为其他的编码对iso-8859-1兼容吧。

因此,我们常常使用 bytes = string.getBytes("iso-8859-1") 坐中间码来进行逆向操作,得到原始的“字节串”。然后再使用正确的ANSI 编码,比如 string = new String(bytes, "GB2312"),来得到正确的“UNICODE 字符串”。

不信的话可以试试,utf8和gb不能互相转换,只有iso-8859-1做中间码可以完美互相转码!!!
posted on 2010-05-23 13:19 Todd 阅读(1407) 评论(1)  编辑  收藏 所属分类: java

评论

# re: 汉字字符编码与转码详解 2014-07-29 10:36 re: 汉字字符编码与转码详解
re: 汉字字符编码与转码详解  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: