最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)模擬錕斤拷等各類亂碼詳解

 更新時間:2023年02月23日 10:24:40   作者:小小明-代碼實體  
說到亂碼問題就不得不提到錕斤拷,這算是非常常見的一種亂碼形式,那么它到底是經(jīng)過何種錯誤操作產(chǎn)生的呢?本文我們就來一步步探究

錕拷碼和口字碼

說到亂碼問題就不得不提到錕斤拷,這算是非常常見的一種亂碼形式,那么它到底是經(jīng)過何種錯誤操作產(chǎn)生的呢?下面我們一步步探究。

看一個基本示例:

"??".encode("u8").decode("gbk")

'錕斤拷'

我們將?字符以UTF-8編碼后,以GBK編碼解碼就可以得到 錕斤拷 的亂碼。

那么為什么 錕斤拷 為什么如此常見呢?這是因為大部分編程語言在使用UNICODE系列的編碼去解碼時,會將不識別的字節(jié)編碼為0xFFFD(65533)即?字符表示未知字符進(jìn)行占位:

"\uFFFD"

'?'

注意:UNICODE系列包括UTF-8、UTF-16、UTF-32編碼,一般UNICODE編碼指UTF-16編碼。在python中unicode_escape編碼表示UNICODE編碼的的轉(zhuǎn)義形式:

"\uFFFD".encode("unicode_escape").decode()
'\\ufffd'

對于Python,默認(rèn)情況下解碼碰到未知字符時會直接拋出異常,但是如果設(shè)置errors參數(shù)為replace時,則會將未知字符解碼為?占位。

將漢字用GBK編碼:

"小小明".encode("gbk")

b'\xd0\xa1\xd0\xa1\xc3\xf7'

將上述編碼結(jié)果用UTF-8編碼解碼,并設(shè)置為替換模式:

"小小明".encode("gbk").decode("u8", "replace")

'СС??'

0xd0a1被解碼成С,但是0xc3和0xf7無法被UTF-8編碼識別,只能用占位符?替換,于是就得到了上面的結(jié)果。

此時我們再編碼并解碼:

"小小明".encode("gbk").decode("u8", "replace") \
    .encode("u8").decode("gbk", "replace")

'小小錕斤拷'

這是因為?被編碼成了0xEFBFBD

"??".encode("u8")

b'\xef\xbf\xbd\xef\xbf\xbd'

而0xEFBFBDEFBFBD被GBK解碼時,正好就是錕(0xEFBF),斤(0xBDEF),拷(0xBFBD)。

上述以?為主的亂碼字符就是口字碼,原因是以UTF-8編碼讀取了GBK編碼的中文。

而錕拷體則是大部分都是錕斤拷的全中文字符,原因是用GBK編碼讀取了UTF-8編碼的口字碼中文。

古文碼與問句碼

問句碼產(chǎn)生的核心原因在于GBK對于無法編碼的字符會使用?填充:

"???".encode("gbk", "replace")

b'??'

古文碼則與前面的口字碼產(chǎn)生原因相反,使用GBK編碼讀取以UTF-8編碼的中文:

"小小明".encode("u8").decode("gbk", "replace")

'灝忓皬鏄?'

此時的 灝忓皬鏄 就非常像古文,gbk解碼對于不識別的字節(jié)也使用?占位。

此時gbk編碼對于?編碼失敗,使用?替代:

'灝忓皬鏄?'.encode("gbk", "replace")

b'\xe5\xb0\x8f\xe5\xb0\x8f\xe6\x98?'

此時再用UTF-8解碼就得到了問句碼:

b'\xe5\xb0\x8f\xe5\xb0\x8f\xe6\x98?'.decode("u8", "ignore")

'小小?'

不過問句碼只在原始字符串為奇數(shù)時產(chǎn)生,如果原始字符串長度為偶數(shù),使用上述編碼方式則可以原樣還原字符串:

"小小明月".encode("u8").decode("gbk", "replace") \
    .encode("gbk", "replace").decode("u8", "ignore")

'小小明月'

這樣說明只要我們將原始漢字字符串填充到偶數(shù),就可以使用古文碼實現(xiàn)可逆的數(shù)據(jù)傳輸,而錕拷體則是一種不可逆的亂碼。

符號碼和拼音碼

還有兩種可逆的亂碼,我們先看看符號碼:

"小小明".encode("u8").decode("iso8859-1")

'å°\x8få°\x8fæ\x98\x8e'

像這種大部分字符為各種符號的亂碼就稱為符號碼,符號碼可以直接還原為原始的文本:

'?°\x8f?°\x8f?\x98\x8e'.encode("iso8859-1").decode("u8")

'小小明'

再看看拼音碼:

"小小明".encode("gbk").decode("iso8859-1")

'ССÃ÷'

這種大部分字符都是帶有聲調(diào)的字母稱為拼音碼,同樣可以直接還原:

'D?D??÷'.encode("iso8859-1").decode("gbk")

'小小明'

總結(jié)

名稱示例特點原因
口字碼СС??大部分字符是問號小方塊UTF-8解碼GBK編碼的中文
錕拷體錕斤拷小小錕斤拷學(xué)習(xí)錕斤拷全中文字符,大部分都是"錕斤拷"這幾個字符GBK解碼UTF-8編碼的口字碼
古文碼灝忓皬鏄庢湀大部分都是生僻字,像古文GBK解碼UTF-8編碼的中文漢字
問句碼小小?字符串長度為奇數(shù)時,結(jié)尾為問號GBK遇到不能編碼的字符時填充
符號碼好好å\xad¦å¤©å¤©å\xad¦大部分字符為各種符號ISO8859-1編碼解碼UTF-8編碼的中文漢字
拼音碼ºÃºÃѧϰÌìÌìÏòÉÏ大部分字符都是帶有聲調(diào)的字母ISO8859-1編碼解碼GBK編碼的中文漢字

到此這篇關(guān)于Python實現(xiàn)模擬錕斤拷等各類亂碼詳解的文章就介紹到這了,更多相關(guān)Python模擬亂碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python腳本如何在bilibili中查找彈幕發(fā)送者

    Python腳本如何在bilibili中查找彈幕發(fā)送者

    這篇文章主要介紹了如何在bilibili中查找彈幕發(fā)送者,本文給大家分享小編寫的一個python腳本來實現(xiàn)bilibili彈幕發(fā)送者,需要的朋友可以參考下
    2020-06-06
  • python使用cookie庫操保存cookie詳解

    python使用cookie庫操保存cookie詳解

    Python中Cookie模塊(python3中為http.cookies)提供了一個類似字典的特殊對象SimpleCookie,其中存儲并管理著稱為Morsel的cookie值集合,這里介紹了python操作cookie的使用方法
    2014-03-03
  • python中pow函數(shù)用法及功能說明

    python中pow函數(shù)用法及功能說明

    在本篇文章里小編給大家整理的是一篇關(guān)于python中pow函數(shù)用法及功能說明內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • django將網(wǎng)絡(luò)中的圖片,保存成model中的ImageField的實例

    django將網(wǎng)絡(luò)中的圖片,保存成model中的ImageField的實例

    今天小編就為大家分享一篇django將網(wǎng)絡(luò)中的圖片,保存成model中的ImageField的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python添加模塊搜索路徑方法

    python添加模塊搜索路徑方法

    下面小編就為大家?guī)硪黄猵ython添加模塊搜索路徑方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • django配置連接數(shù)據(jù)庫及原生sql語句的使用方法

    django配置連接數(shù)據(jù)庫及原生sql語句的使用方法

    這篇文章主要給大家介紹了關(guān)于django配置連接數(shù)據(jù)庫,以及原生sql語句的使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Django 配置多站點多域名的實現(xiàn)步驟

    Django 配置多站點多域名的實現(xiàn)步驟

    這篇文章主要介紹了Django 配置多站點多域名的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • python中enumerate的用法實例解析

    python中enumerate的用法實例解析

    這篇文章主要介紹了python中enumerate的用法,對Python初學(xué)者而言是非常重要的概念,需要的朋友可以參考下
    2014-08-08
  • pandas讀取csv文件提示不存在的解決方法及原因分析

    pandas讀取csv文件提示不存在的解決方法及原因分析

    這篇文章主要介紹了pandas讀取csv文件提示不存在的解決方法及原因分析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python實現(xiàn)隨機漫步算法

    python實現(xiàn)隨機漫步算法

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)隨機漫步算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08

最新評論

图木舒克市| 大关县| 耿马| 商洛市| 泰宁县| 西乌珠穆沁旗| 阳西县| 乌海市| 定南县| 左云县| 朝阳县| 彭泽县| 富蕴县| 威远县| 澳门| 衡东县| 上高县| 义乌市| 合水县| 孟津县| 建平县| 荥经县| 扶余县| 绥芬河市| 竹北市| 高碑店市| 柳河县| 南京市| 凤阳县| 广元市| 乌拉特中旗| 齐河县| 台南县| 定南县| 临猗县| 渭南市| 丰原市| 介休市| 绥棱县| 彭阳县| 迁安市|