兩個 錕斤拷 ?

2022-03-11 09:13:18 字數 2013 閱讀 5753

以一首七言絕句作為開篇:

手持兩把錕斤拷

口中疾呼燙燙燙

腳踏千朵屯屯屯

笑看萬物鍩鍩鍩

在上次石頭哥發的這篇文章中 —— 你可能也會掉進這個簡單的 string 的坑,講述了因字元編碼問題而連續踩坑的經歷,文中有乙個神奇的字元 「�」。

要弄清這個問題,還得先從編碼談起。

比如大家所熟知的 ascii 編碼,規定了

二進位制的0100 0001,也就是十進位制的65,代表的含義就是大寫字母a

也是一種編碼字元,就跟上面的a一樣一樣的,它是 unicode 編碼方式中的乙個特殊的字元,也就是 0xfffd(65533),語義是乙個佔位符(replacement character),用來表達未知的,自己不認識的東西。

比如上篇文章中的實驗截圖的,紅色部分圈出來的對應的字元,utf-8 編碼都不認識,所以按照 unicode 的定義,我就只好用統一的乙個佔位符 ——0xfffd(65533)來表示。

我們接著上篇的例子來看, 如下圖所示,仍然從 「程式猿石頭」 對應二進位制編碼擷取部分:

如上圖所示,第 18 行的位元組陣列new byteutf-8恰好都不認識,因此只能用佔位符替換。

這種情況,在編碼轉換過程中確實也比較常見,如果雙方沒溝通清楚,確實很容易出現互相不認識的情況。

在中文系統中,常見的字元編碼是 gbk,這個時候,因為大家沒提前商量清楚,我就預設按照 gbk 給你編碼看看。

驚不驚喜意不意外……

其實是因為,utf-8編碼後變成了0xefbfbd(就是上面的位元組陣列[-17, -65, -67]),兩個連起來就是0xefbfbdefbfbd,也就是上面的位元組陣列[-17, -65, -67, -17, -65, -67]

而 gbk 編碼依然採用雙位元組編碼方案,因此上面的 6 位元組0xefbfbdefbfbd,就被拆成了 3 個 2 位元組字元即0xefbf, 0xbdef, 0xbfbd對應 gbk 編碼裡面就是:錕(0xefbf),斤(0xbdef),拷(0xbfbd)

,現在,你知道了嗎?

最近看到乙份來自阿里巴巴開源的學習資料,涵蓋了大前端、客戶端、服務端、演算法等多個技術領域,全書內容⻚數1600+,現在分享給大家。點選原文獲取。

經典亂碼錕斤拷

錕斤拷是什麼?我也是最近才搞明白的。我考證了一下,這個亂碼的原因 相當經典。unicode和老編碼體系的轉化過程中,肯定有一些字,用unicode是沒法表示的,unicode官方用了乙個佔位符來表示這些文字,這就是 u fffd replacement character 那麼u fffd的utf ...

考據 「燙燙燙」與「錕斤拷」的原理

在程式設計師 上經常看到乙個段子 滿滿的都是淚啊 手持兩把錕斤拷,口中疾呼燙燙燙。解釋一下為什麼會是這兩個東西不是別的 棍斤拷亂碼 源於gbk字符集和unicode字符集之間的轉換問題。unicode和老編碼體系的轉化過程中,肯定有一些字,用unicode是沒法表示的,unicode官方用了乙個佔位...

兩個明星 兩名水貨 兩個英超解說

兩個明星 兩名水貨 兩個英超解說 來自 撓頭蛇的blog 2006 03 30 08 54 42 大中小1 在這場算不上非常精彩的冠軍盃八強戰中,非常精彩的是兩名阿根廷人的表現。乙個是黃色的里克爾梅,他的護球簡直令人絕望 另乙個是藍黑的薩內蒂,他的狂飆突進幾乎讓人忘記了現代足球的陣型這個概念。看了里...