Read Sean

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

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

          Posted on 2011-03-29 23:50 laogao 閱讀(2722) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Computer UsageOn Java

          今天幫同事解決一個(gè)郵件亂碼的問(wèn)題,簡(jiǎn)記于此。

          郵件正文就不貼了,有一段從上下文判斷明顯應(yīng)該是"上海",卻顯示成了"涓...",于是自然而然的拿出"上"字和"涓"字來(lái)分析。

          通過(guò)簡(jiǎn)單的Groovy腳本對(duì)這兩個(gè)漢字分別按gbk和utf-8編碼,并將得到的byte[]轉(zhuǎn)換成二進(jìn)制表示輸出如下:

          == 上 ==
          11001001 11001111
          11100100 10111000 10001010
          == 涓 ==
          11100100 10111000
          11100110 10110110 10010011

          注意"上"字的第2排前兩組和"涓"字第1排的兩組byte正好相同,于是問(wèn)題迎刃而解,亂碼是由于郵件以u(píng)tf-8編碼后被錯(cuò)誤的以gbk解碼(隨后又重新編碼成utf-8)造成的。

          關(guān)鍵代碼:

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

          主站蜘蛛池模板: 韶关市| 津南区| 哈尔滨市| 彩票| 民丰县| 蓬安县| 贡山| 沂南县| 比如县| 松原市| 上林县| 达州市| 焉耆| 二手房| 满城县| 临湘市| 马鞍山市| 宝丰县| 张家口市| 嘉峪关市| 隆子县| 安阳县| 右玉县| 西安市| 麟游县| 龙江县| 元阳县| 西华县| 崇文区| 醴陵市| 陇川县| 信丰县| 澄迈县| 深泽县| 九江市| 隆昌县| 通渭县| 井陉县| 航空| 固阳县| 乾安县|