汉字字符编码与转码详解

程序中有汉字参数,经常会遇到编码转码问题,总结下:
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做中间码可以完美互相转码!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值