Read Sean

Read me, read Sean.
posts - 508, comments - 655, trackbacks - 9, articles - 4

"上海"是如何变成"涓婃捣"的?

Posted on 2011-03-29 23:50 laogao 阅读(2589) 评论(0)  编辑  收藏 所属分类: Computer UsageOn 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()
}


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


网站导航: