Posted on 2011-03-29 23:50
laogao 阅读(2652)
评论(0) 编辑 收藏 所属分类:
Computer Usage 、
On Java
今天帮同事解决一个邮件乱码的问题,简记于此。
邮件正文就不贴了,有一段从上下文判断明显应该是"上海",却显示成了"涓...",于是自然而然的拿出"上"字和"涓"字来分析。
通过简单的Groovy脚本对这两个汉字分别按gbk和utf-8编码,并将得到的byte[]转换成二进制表示输出如下:
== 上 ==
11001001 11001111
11100100 10111000 10001010
== 涓 ==
11100100 10111000
11100110 10110110 10010011
注意"上"字的第2排前两组和"涓"字第1排的两组byte正好相同,于是问题迎刃而解,乱码是由于邮件以utf-8编码后被错误的以gbk解码(随后又重新编码成utf-8)造成的。
关键代码:
void showBytes(String input) {
println("== " + input + " ==")
b = input.getBytes("gbk")
b.each { print Integer.toBinaryString(it).substring(24) + ' ' }
println()
b = input.getBytes("utf8")
b.each { print Integer.toBinaryString(it).substring(24) + ' ' }
println()
}