【原創】python3讀取操做系統設備中文編碼問題——encode、decode

        1、背景和問題python

        近期在作一個關於聲卡錄音的項目,開發環境是win10 64位家庭中文版,pycharm2019.1,python3.6(Anaconda3),python模塊pyaudio。由於須要實現內錄音(錄製系統內部聲音,而不是麥克風的聲音),所以須要pyaudio模塊讀取設備名稱來指定相應的設備進行錄製。問題來了,系統是中文的,設備也有中文字符(「立體聲混音」)。試來試去,就是find不到設備,pycharm調試,確實遍歷到有好幾個設備,可是都是亂碼的。問題露出頭來了,果真,又是編碼的問題。爲何用到果真,由於編碼問題以前在作爬蟲的時候可困擾了好久,網頁爬出來的都是各類二進制流數據。再說了,編碼這個即原始又沒法迴避的問題,坑可不小。學習

        問題:中文亂碼、AttributeError: 'str' object has no attribute 'decode'、UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc九、Beta版:使用Unicode utf-8提供全球語言支持。編碼

        2、編碼的基礎知識spa

        這裏來學習下有關編碼的一些基本知識。這裏要感謝博主joyfixing寫的《完全搞懂 python 中文亂碼問題》,前因後果寫的很詳細,並且至關感同身受,這裏主要進行引用借鑑。操作系統

  3、關於亂碼.net

        編碼encode就是將字符轉成二進制流,解碼decode就是把二進制流轉成各類的字符。在這兩個相互轉化的過程當中,涉及到操做系統、控制檯cmd、IDE、文本保存等等,有一環節出現不兼容就會亂碼,亂碼的形式可謂眼花繚亂,一臉懵逼。(黑人問號臉)能夠網上搜索,這裏就不闡述了。3d

        4、解決方法調試

        在開發的時候,我把程序的編碼設爲了utf-8編碼格式。經過這樣設置。# -*- ecoding: utf-8 -*-code

        天真的覺得應該就能夠了吧。發現,沒有那麼簡單。如圖,仍是一團糟。blog

        因而乎,就開始了兩天的網上衝浪,並且是手機設的熱點!!!

        有人說pycharm設置裏要設下文件編碼模式,我就照作了。

        仍是沒解決。有人說看下系統默認的編碼模式,我就看了下。返回的都是utf-8啊。

        還有人說要decode轉到中間的Unicode字符集,再encode到utf-8.新的問題來了,再搜索,哦,python3和python2不同了,3裏面不能這麼用了。(持續黑人問號臉)

        又有人說改爲這樣,對。在cmd裏輸入chcp指令查詢操做系統編碼爲936,爲gbk。有道理,有些小激動,感受要出人頭地了呢。

        新的問題又來了。UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc9

        還有人說加上ignore,把一些沒有的字符集給忽略了,仍是亂的!!!

        後面就各類編碼方式(utf-八、gb23十二、gbk、gb**、utf-8-sig……),各類encode、decode排列組合了,幾乎到了奔潰的邊緣。(我是誰?我在哪?我在幹什麼?)

        直到看到有人說更改操做系統的語言設置。

 

 時間和語言-管理語言設置-更改系統區域設置-中文(簡體、中國),沒錯啊!!!我也是這樣的啊。重啓。好噠,使出個人殺手鐗—重啓下!!!

稍等片刻,啓動pycharm,調試程序……還!是!亂!碼!啊!啊!啊!

等下,等下,剛纔更改區域語言的時候,下面有一行字是什麼來着。Beta版:使用Unicode utf-8提供全球語言支持。

        操做系統沒有默認的嗎???好噠,勾上,重啓。期待的大眼睛!!!

        天啊,解決了,困擾了兩天的問題解決了,真的嗎,喜出望外。(我是誰?我在哪?我在幹什麼?)

        5、總結

        固然,關於編碼問題,仍是那句話,即原始,又避不開。這樣設置後,可能有一些軟件會不兼容的。

        咱們站在巨人的肩上,享受時光靜好的同時,適當瞭解原理和前輩走過的路。但願代碼且調且珍惜,bug漸行漸遠。

        Ps:

        你們在coding的時候,項目文件開始會留下逼格滿滿的註釋,每建立一個就寫一次嗎?不存在的。

        在 File | Settings | Editor | File and Code Templates 設置就能夠了。

 

# -*- ecoding: utf-8 -*-

# @ModuleName: ${NAME}

# @FileName  : ${NAME}.py

# @Software  : ${PRODUCT_NAME}

# @Function  :

# @Author    : ***

# @blog      : https://www.cnblogs.com/imu-ai/

# @E-mail    : ***

# @Time      : ${DATE} ${TIME}

相關文章
相關標籤/搜索