Read Sean

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

"上海"是如何變成"涓婃搗"的?

Posted on 2011-03-29 23:50 laogao 閱讀(2143) 評論(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()
}


只有注冊用戶登錄后才能發表評論。


網站導航:
 
云南11选5软件