欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

【原创】python3读取操作系统设备中文编码问题——encode、decode

程序员文章站 2022-03-05 17:17:07
pyaudio模块读取设备名称来指定相应的设备进行录音,涉及操作系统编码、IDE解码等问题 ......

        一、背景和问题

        近期在做一个关于声卡录音的项目,开发环境是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 0xc9、beta版:使用unicode utf-8提供全球语言支持。

        二、编码的基础知识

        这里来学习下有关编码的一些基本知识。这里要感谢博主,来龙去脉写的很详细,而且相当感同身受,这里主要进行引用借鉴。

  三、关于乱码

        编码encode就是将字符转成二进制流,解码decode就是把二进制流转成各种的字符。在这两个相互转化的过程中,涉及到操作系统、控制台cmd、ide、文本保存等等,有一环节出现不兼容就会乱码,乱码的形式可谓眼花缭乱,一脸懵逼。(黑人问号脸)可以网上搜索,这里就不阐述了。【原创】python3读取操作系统设备中文编码问题——encode、decode

        四、解决方法

        在开发的时候,我把程序的编码设为了utf-8编码格式。通过这样设置。# -*- ecoding: utf-8 -*-

        天真的以为应该就可以了吧。发现,没有那么简单。如图,还是一团糟。

【原创】python3读取操作系统设备中文编码问题——encode、decode

        于是乎,就开始了两天的网上冲浪,而且是手机设的热点!!!

        有人说pycharm设置里要设下文件编码模式,我就照做了。

【原创】python3读取操作系统设备中文编码问题——encode、decode

        还是没解决。有人说看下系统默认的编码模式,我就看了下。返回的都是utf-8啊。

【原创】python3读取操作系统设备中文编码问题——encode、decode

【原创】python3读取操作系统设备中文编码问题——encode、decode

        还有人说要decode转到中间的unicode字符集,再encode到utf-8.新的问题来了,再搜索,哦,python3和python2不一样了,3里面不能这么用了。(持续黑人问号脸)【原创】python3读取操作系统设备中文编码问题——encode、decode

【原创】python3读取操作系统设备中文编码问题——encode、decode

        又有人说改成这样,对。在cmd里输入chcp指令查询操作系统编码为936,为gbk。有道理,有些小激动,感觉要出人头地了呢。

【原创】python3读取操作系统设备中文编码问题——encode、decode

        新的问题又来了。unicodedecodeerror: 'utf-8' codec can't decode byte 0xc9

【原创】python3读取操作系统设备中文编码问题——encode、decode

        还有人说加上ignore,把一些没有的字符集给忽略了,还是乱的!!!

        后面就各种编码方式(utf-8、gb2312、gbk、gb**、utf-8-sig……),各种encode、decode排列组合了,几乎到了奔溃的边缘。(我是谁?我在哪?我在干什么?)

【原创】python3读取操作系统设备中文编码问题——encode、decode

        直到看到有人说更改操作系统的语言设置。

【原创】python3读取操作系统设备中文编码问题——encode、decode

【原创】python3读取操作系统设备中文编码问题——encode、decode

 
【原创】python3读取操作系统设备中文编码问题——encode、decode 【原创】python3读取操作系统设备中文编码问题——encode、decode
【原创】python3读取操作系统设备中文编码问题——encode、decode 【原创】python3读取操作系统设备中文编码问题——encode、decode

 时间和语言-管理语言设置-更改系统区域设置-中文(简体、中国),没错啊!!!我也是这样的啊。重启。好哒,使出我的杀手锏—重启下!!!

稍等片刻,启动pycharm,调试程序……还!是!乱!码!啊!啊!啊!

等下,等下,刚才更改区域语言的时候,下面有一行字是什么来着。beta版:使用unicode utf-8提供全球语言支持。

【原创】python3读取操作系统设备中文编码问题——encode、decode

        操作系统没有默认的吗???好哒,勾上,重启。期待的大眼睛!!!

【原创】python3读取操作系统设备中文编码问题——encode、decode

        天啊,解决了,困扰了两天的问题解决了,真的吗,喜出望外。(我是谁?我在哪?我在干什么?)

        五、总结

        当然,关于编码问题,还是那句话,即原始,又避不开。这样设置后,可能有一些软件会不兼容的。

        我们站在巨人的肩上,享受时光静好的同时,适当了解原理和前辈走过的路。希望代码且调且珍惜,bug渐行渐远。

        ps:

        大家在coding的时候,项目文件开始会留下逼格满满的注释,每创建一个就写一次吗?不存在的。

【原创】python3读取操作系统设备中文编码问题——encode、decode

        在 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}