Python2 7 中文字元編碼,使用Unicode時,選擇什麼編碼格式?

時間 2021-06-02 07:18:49

1樓:小頭

這個問題可以參考我的另乙個回答,

python 中文亂碼出現,不知道是什麼原因? - 小頭的回答

在Python2中,str型別資料的編碼格式取決於具體環境,在cmd輸入」漢字」時,實際上是以cp936編碼的,因此這裡使用 unicode("漢字", "gb2312")把它轉換成unicode型別(gbk相容gb2312),而不是 utf-8

而這種情況在檔案中又不同(沒錯,python2就是這麼蛋疼),檔案中str型別資料的編碼格式取決於檔案的實際編碼(不是檔案開頭的宣告哦),當檔案使用utf-8編碼時,str的編碼也是utf-8,此時在檔案中使用:print unicode("漢字","utf8")

實際python做了兩個操作

將str型別資料 "漢字" 以 utf-8格式轉換(decode)成 unicode型別

將unicode型別資料 」漢字「 輸出

這種情況不會報錯且輸出不亂碼,原因是

這裡的str型別與檔案一樣採用utf-8編碼,如果在檔案新增 print repr("漢字") ,可以看到結果是'\xe4\xbd\xa0\xe5\xa5\xbd',而不是上面截圖的"'\\xba\\xba\\xd7\\xd6'"

列印unicode型別時,print自動呼叫gbk編碼輸出

如果這裡檔案使用gbk編碼,內容不變,同樣會報與終端同樣的錯

資料庫那個問題,建議先確認mysql是否正確配置了utf-8編碼

2樓:Yin Qu

我覺得關鍵是區分「位元組」和「字元」的概念,還要知道一點點字型的常識。

「字元」可以看成是乙個抽象概念,如當樓主說「漢字」,其實他意思是表達的是表示這麼乙個概念的兩個字元。

當字元在計算機中表示的時候,需要編碼成二進位制(位元組),於是就出現了不同的編碼方式,如 GBK, UTF-8 等。如 Kenneth 展示的,「漢字」這兩個字元在 GBK 中編碼為 0xBABAD7D6,而在 UTF-8 中編碼為 0xE6B189E5AD97。

最終顯示時,則還要根據所使用的字型,把抽象的字元轉化成具象的影象。

所以,樓主的第乙個問題在於雖然你看到的是「漢字」的影象,但其在該指令碼的原始檔中的位元組編碼可能是任何一種——在 Windows 下是 GBK 或 GB18030 等。於是 python 看到的是一串 GBK / GB18030 編碼的位元組,而你試圖告訴 python 這是 UTF-8 編碼的,那自然報錯了。

第二個問題,對 SQL Server 不熟,不過看起來原因是當你把從資料庫讀出的資料(位元組形式,可能是 GBK 等非 Unicode 編碼)放入 unit 這個變數的時候,程式錯把非 Unicode 編碼的位元組當成 Unicode 編碼解釋了。那麼排查思路應該是搞清楚資料在讀出時是什麼編碼(這可能跟資料存入時的編碼相關,也可能跟資料庫配置有關),以及存入 unit 時程式做了哪些轉換。

Python2 7 安裝tensorflow gpu後,import tensorflow出錯?

習慣丶不習慣 首先可以在Pycharm裡面的setting 中看一下自己python版本以及已經安裝後的包,tensorflow gpu 需要安裝對應的CUDA和CUDNN,對於乙個重灌系統好多次的人來說,cuda和cudnn版本的很重要!兩個彼此要對應,而且也要符合python2.7的版本。PS ...

零基礎學習Python,用python2 7還是用python3

JWTbaby 零基礎學習python當然要是用python3了呀,孩子。目前市面上的公司都已經將python2過渡到python3了,python2的最後乙個版本是python2.17,已經停止維護了。而且python3中解決了或者優化了很多python2的問題,比如字典的keys values ...

python2 7的sort函式預設採用什麼排序演算法,適用於怎樣的數列的排序?

挖礦老司機 python中的sorted排序,真的是高大上,用的Timsort演算法。什麼是Timsort,請看 wiki的解釋 http en.wikipedia.org wiki Timsort 另外,國內有乙個文件,適當翻譯 Timsort原理介紹 Data Analytics 部落格頻道 C...