Read Sean

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

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

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

          主站蜘蛛池模板: 扎囊县| 信丰县| 清徐县| 柳州市| 北宁市| 兴仁县| 普定县| 邵东县| 乾安县| 皮山县| 新津县| 乌拉特中旗| 沂南县| 桑植县| 浦北县| 沙湾县| 金山区| 达拉特旗| 法库县| 阿鲁科尔沁旗| 浑源县| 乐安县| 万荣县| 娱乐| 阳春市| 卢龙县| 曲沃县| 连州市| 朔州市| 临沧市| 安多县| 禹州市| 睢宁县| 冷水江市| 周宁县| 加查县| 巩留县| 临泉县| 科技| 泰兴市| 西城区|