日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中字符串中文乱码_Python字符串开头的bquot;、uquot;、rquot;与中文乱码

發布時間:2025/3/20 python 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中字符串中文乱码_Python字符串开头的bquot;、uquot;、rquot;与中文乱码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先看幾個常見的中文亂碼:s?=?u'More更多請關注我'print('--encoded---')

print('【utf-8】',?bytes(s,?encoding='utf-8'))

print('【utf-16】',?bytes(s,?encoding='utf-16'))

print('【gbk】',?bytes(s,?encoding='gb2312'))

print('【unicode-escape】',?bytes(s,?encoding='unicode-escape'))

print('--decoded--')

print('【utf-8=>utf-8】',?s.encode('utf-8').decode('utf-8'))

print('【utf-8=>utf-16】',?s.encode('utf-8').decode('utf-16'))

print('【utf-8=>ISO-8859-1】',?s.encode('utf-8').decode('ISO-8859-1'))

print('【gbk=>ISO-8859-1】',?s.encode('gbk').decode('ISO-8859-1'))

運行得到:

image.png

仔細看一下,找到下面兩個規律:要么是上面encode編碼后的\...\...\...,要么是錯誤解碼decode之后的亂碼。

除了兩個最后輸出utf-16的,其他的都能正常顯示英文More。

u'和b'

第一行我們用了u'More...',這個u是可以省略的,在python3里面所有字符串默認都是utf-8編碼解碼的,這個u就是指示要用utf-8編碼,所以可省略。

上面四個encoded輸出的開頭都有b'...'開頭,因為代碼里面是bytes(s,...),bytes是字節,字符串可以用很多種編碼方式變為字節,就像密碼電報一樣,同一個信息可以用不同的算法加密成各種不同的亂碼,如果你不知道是什么編碼的,你就讀不出。python2中只有字節形式的字符串,沒有u'開頭的utf-8編碼的,所以python3才發明了b'開頭這種表示字節的方法,兼容舊版本。

字符串經過特定的方式編碼coding成為字節,然后再通過正確的方式也可以把字節還原為字符串。關鍵就是要知道原來的編碼方式

.encode('utf-8').decode('utf-8')這句當然看起來沒毛病,所以也輸出了正確的文字。

而后面s.encode('utf-8').decode('utf-16')這種就不正常了,編碼encode方式和decode解碼方式不一樣,就導致了亂碼。

解決亂碼問題

首先要想辦法知道或者實驗出原來是什么編碼的,你可以對照上面輸出的代碼進行猜測。

如果是很多斜杠的bytes,那么就直接嘗試不同的decode:s=b'More\xe6\x9b\xb4\xe5\xa4\x9a\xe8\xaf\xb7\xe5\x85\xb3\xe6\xb3\xa8\xe6\x88\x91'print(s.decode('utf-8'))

如果是被錯誤解碼的亂碼,那么就嘗試反向encode再decode就能還原:#亂碼來自s.encode('gbk').decode('ISO-8859-1')s='More?ü?à??1?×¢?ò'.encode('ISO-8859-1').decode('gbk')print(s)

r' 強制不轉義

先看下這個問題:s1=r'.\folder\new.file's2=b'.\folder\new.file's3=u'.\folder\new.file'print('r:',s1)

print('b:',s2)

print('u:',s3)

它的輸出是這樣的,你肯定猜不到:

image.png

為什么會是這樣?只有r開頭的正常。

我們都知道代碼里面字符串要用引號包裹,那么字符串里面要是也有引號怎么辦?換行怎么辦?

編程語言會用特殊方法來表示這些特殊符號,叫做轉義字符。比如\n表示回車換行,\f表示換頁,\"表示雙引號,\'標示單引號...

那么真的遇到了\n怎么辦?就像上面那個情況,b'把f編碼成了\x0,而u'直接把\f弄沒了,\n變成了回車...

為了避免這種情況,就有了r'強制不轉義,優點是明顯的,不會亂變,缺點也是有的,那就不能真的顯示回車換行了啊。

一般在目錄地址和正則表達式中我們常用r'避免混亂。

作者:zhyuzh3d

鏈接:https://www.jianshu.com/p/220ee0f219c6

總結

以上是生活随笔為你收集整理的python中字符串中文乱码_Python字符串开头的bquot;、uquot;、rquot;与中文乱码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。