天天看点

java 与 iso-8859-1 编码

今天又研究了一下字符编码。写了些测试代码,算是比较了解了。

主要是研究 iso-8859-1

建议先看这篇:《第二篇:JAVA字符编码系列二:Unicode,ISO-8859-1,GBK,UTF-8编码及...》

http://my.oschina.net/whp/blog/36846

然后再看看 iso-8859-1 的定义。

http://baike.baidu.com/view/2613676.htm

[color=red]

这一句话非常关键:

因为ISO-8859-1编码范围使用了单字节内的所有空间,在支持ISO-8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃。换言之,把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。这是个很重要的特性,MySQL数据库默认编码是Latin1就是利用了这个特性。

在工作中,从 web 提交的数据,到了 web 容器后,变成了 iso-8859-1 的字符串。

可以认为,被执行了如下代码:

byte[] buf_gbk = s.getBytes("gbk");

String sIso88591 = new String(buf_gbk, "iso-8859-1");

所以,我们获取数据时需要执行:

byte[] buf_iso88591 = sIso88591.getBytes("iso-8859-1");

String sGbk = new String(buf_iso88591, "gbk");

将编码转回 gbk。[/color]

看完这两篇后,写了段测试代码:

参考资料:

http://my.oschina.net/whp/blog/36846

http://baike.baidu.com/view/2613676.htm