Python 3 Bytes.decode 遇到的问题— qytz-notes v0.1
文章推薦指數: 80 %
使用Python 3 的 Subprocess 模块执行shell 命令,读取到的结果的类型是 bytes ,如果是文本需要转成 str 类型。
一般来说,Linux 的中文环境大都使用utf-8 编码,我 ...
qytz-notes
latest
Python笔记
开源代码阅读笔记
IPythonNoteBooks
技术笔记
ThePythonGTK+3Tutorial
GStreamer开发经验
PycairoDocumentation
D-Bus使用
shell脚本常用操作入门
JavaScript的移位运算与IP地址处理
automake和autoconf使用简明教程
Python3Bytes.decode遇到的问题
Linux粘滞位说明
mysql绿色启动方法
LDAP
系统安全的思考
VPN高级选项那些事
sphinx生成本地化的文档
简易git服务器
量化投资
瞎想
关于我
联系
qytz-notes
Docs»
技术笔记»
Python3Bytes.decode遇到的问题
EditonGitHub
Python3Bytes.decode遇到的问题¶
使用Python3的Subprocess模块执行shell命令,读取到的结果的类型是bytes,如果是文本需要转成str类型。
一般来说,Linux的中文环境大都使用utf-8编码,我执行操作的系统也确实使用的utf-8编码,然后还是遇到了问题……
即使是使用了utf-8编码,我们的文件名仍然可能会产生乱码,比如我们执行ls可能会看到这样的文件名::
OITS??ѵ–????.mp4
而如果使用Subprocess模块执行ls命令,则result.decode(“utf-8”)会报UnicodeDecodeError异常,
初见这个问题我非常惊讶,应该utf-8可以编码所有的字符了吧,为啥我用utf-8decode还会出现这样的问题。
我觉得出现这个问题的原因很可能是,Linux文件系统使用的utf-8编码保存文件名,但是该文件是从Windows的文件系统拷贝过来,
而Windows文件系统的默认编码则是不是utf-8,这样我们在shell执行ls命令时显示的就是乱码字符了,
因为我们的文件系统是存的utf-8编码的文件名,自然该文件名也是按照utf-8来解码输出。
要解决这个问题也不是很麻烦,参考资料1的答案很清楚,要么使用兼容的cp437/latin-1解码,要么使用utf-8解码时进行容错处理。
>>>result=b'\xc5\xe0\xd1\xb5--\xd1\xee\xc0\xa5.mp4'
>>>result.decode("utf-8",errors="surrogateescape")
'\udcc5\udce0ѵ--\udcd1\udcee\udcc0\udca5.mp4'
>>>result.decode("cp437")
'┼α╤╡--╤ε└Ñ.mp4'
>>>result.decode("latin-1")
'Åàѵ--ÑîÀ¥.mp4'
参考资料¶
ConvertbytestoaPythonstring
PEP383–Non-decodableBytesinSystemCharacterInterfaces
ReadtheDocs
v:latest
Versions
latest
Downloads
pdf
html
epub
OnReadtheDocs
ProjectHome
Builds
FreedocumenthostingprovidedbyReadtheDocs.
延伸文章資訊
- 1Python3 decode()方法_w3cschool - 编程狮
Python3 decode()方法Python3 字符串描述decode() 方法以指定的编码格式解码 ... 语法decode()方法语法: str.decode(encoding=UTF-...
- 2python3 decode utf-8在PTT/Dcard完整相關資訊| 萌寵公園-2022年8月
關於「python3 decode utf-8」標籤,搜尋引擎有相關的訊息討論:. Unicode HOWTO — Python 3.9.4 documentationThe default e...
- 3python3的decode里面处理错误无法解析的字节 - CSDN博客
s.decode("utf-8", "replace") 替换其中异常的编码,这个相对来可能一眼就知道那些字符编码出问题了。 这个可以有效处理错误. by_side_with_sun. 关注 ...
- 4Unicode HOWTO — Python 3.10.7 documentation
A string of ASCII text is also valid UTF-8 text. UTF-8 is fairly compact; the majority of commonl...
- 5Python 3 Bytes.decode 遇到的问题— qytz-notes v0.1
使用Python 3 的 Subprocess 模块执行shell 命令,读取到的结果的类型是 bytes ,如果是文本需要转成 str 类型。 一般来说,Linux 的中文环境大都使用utf-...