Read Sean

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

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

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

          主站蜘蛛池模板: 贵定县| 宁津县| 东乡县| 琼中| 宜春市| 陇川县| 将乐县| 吉木乃县| 东至县| 红河县| 浪卡子县| 宁乡县| 罗山县| 永昌县| 正安县| 神农架林区| 万山特区| 曲水县| 华容县| 六安市| 台中市| 信阳市| 柳林县| 沂水县| 麻阳| 金沙县| 和林格尔县| 平谷区| 南丰县| 繁峙县| 茂名市| 二连浩特市| 壶关县| 汝城县| 黑水县| 隆德县| 甘孜| 逊克县| 剑阁县| 庆城县| 清河县|