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()
          }

          主站蜘蛛池模板: 龙南县| 花莲市| 古蔺县| 板桥市| 嘉义市| 海淀区| 聂荣县| 曲松县| 南皮县| 浮山县| 法库县| 兴化市| 曲阳县| 铁岭市| 金塔县| 宜宾市| 长泰县| 抚顺县| 林芝县| 石柱| 梓潼县| 株洲市| 辽中县| 榆林市| 伊川县| 股票| 黑水县| 肇源县| 渭源县| 娄烦县| 班玛县| 勃利县| 兴宁市| 澳门| 定远县| 新竹县| 丰镇市| 郁南县| 班戈县| 澄城县| 巴青县|