陈书书书 发表于 2020-5-16 15:10:57

用打开文本文件形式打开音乐文件报错

file3=open('c:\\久石让 - Summer(菊次郎的夏天) (PIANO VER.).mp3 ')
for i in file3:
        print(i,end='')


报错:Traceback (most recent call last):
File "<pyshell#90>", line 1, in <module>
    for i in file3:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 21: illegal multibyte sequence

是要修改编码格式吗?

qiuyouzhi 发表于 2020-5-16 15:11:15

是的

陈书书书 发表于 2020-5-16 15:13:31

qiuyouzhi 发表于 2020-5-16 15:11
是的

请指教,怎么修改呢。我加了个encoding='gbk',还是报错的

Twilight6 发表于 2020-5-16 15:13:40

本帖最后由 Twilight6 于 2020-5-16 15:14 编辑

改成用
open('c:\\久石让 - Summer(菊次郎的夏天) (PIANO VER.).mp3 ',encoding='utf-8')
先试试上面的,二进制打开的话你文本内容读不懂了哈哈哈
或者二进制打开?
open('c:\\久石让 - Summer(菊次郎的夏天) (PIANO VER.).mp3','rb')

Twilight6 发表于 2020-5-16 15:14:15

陈书书书 发表于 2020-5-16 15:13
请指教,怎么修改呢。我加了个encoding='gbk',还是报错的

本身就是GBK编码的才报错的

qiuyouzhi 发表于 2020-5-16 15:14:31

陈书书书 发表于 2020-5-16 15:13
请指教,怎么修改呢。我加了个encoding='gbk',还是报错的

默认就是gbk。。所以用gbk读取报错
得改成utf-8
encoding = "utf-8"

陈书书书 发表于 2020-5-16 15:16:29

Twilight6 发表于 2020-5-16 15:13
改成用

先试试上面的,二进制打开的话你文本内容读不懂了哈哈哈


utf-8也不可以,二进制的正常打开了

Twilight6 发表于 2020-5-16 15:17:46

陈书书书 发表于 2020-5-16 15:16
utf-8也不可以,二进制的正常打开了

{:10_287:}帮助到你的话设置最佳吧

陈书书书 发表于 2020-5-16 15:20:50

file4=open('c:\\久石让 - Summer(菊次郎的夏天) (PIANO VER.).mp3 ',encoding='utf-8')
for i in file4:
        print(i,end='')

Traceback (most recent call last):
File "<pyshell#101>", line 1, in <module>
    for i in file4:
File "D:\python\Python37\lib\codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 21: invalid start byte

Twilight6 发表于 2020-5-16 15:22:27

陈书书书 发表于 2020-5-16 15:20
file4=open('c:\\久石让 - Summer(菊次郎的夏天) (PIANO VER.).mp3 ',encoding='utf-8')
for i in file4:
...

音乐文件包含着一些utf-8 无法解码的东东所以打不开

陈书书书 发表于 2020-5-16 15:22:41

Twilight6 发表于 2020-5-16 15:17
帮助到你的话设置最佳吧

好的,可是还想问一下,utf-8为什么也不可以?如果不想用二进制的话该如何打开呢

Twilight6 发表于 2020-5-16 15:26:59

陈书书书 发表于 2020-5-16 15:22
好的,可是还想问一下,utf-8为什么也不可以?如果不想用二进制的话该如何打开呢

GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准(好像还不是国家标准)。GBK编码专门用来解决中文编码的,是双字节的。不论中英文百都是双字节的。

UTF-8 编码是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的度论坛则用UTF-8 节省空间。另外,如果是外国人访问你的GBK网页,需问要下载中文语言包支持。访问UTF-8编码的网页则不出现这问题。可以直接访问。

打个比方   音乐文件并不是由一个个汉字 英文 组成的,而这些编码就是用来对应汉字和英文的

永恒的蓝色梦想 发表于 2020-5-16 15:50:33

陈书书书 发表于 2020-5-16 15:22
好的,可是还想问一下,utf-8为什么也不可以?如果不想用二进制的话该如何打开呢

我第一次听说有人拿文本编码解二进制流

txxcat 发表于 2020-5-16 16:32:34

    对于python的open来说,文件只有两种,一个文本格式,一种非文本格式(也可以叫二进制文件,不过严格意义来说,所有的计算机文件都是二进制文件,文本文件其实也可以用二进制方式打开),对于文本格式的文件,有多种编码,这是打开是要注意的问题,一般后缀名.txt、.ini、.csv、.lst的文件,还有各种语言的源代码、网页文件l等等,都是文本格式;而非文本文件范围就广了,各种多媒体文件,各种图片、各种office文档、可执行文件,各种各种,太多了,open只能以b的模式打开,不过打开后可以进行的操作不多,除非你非常熟悉你打开文件类型的格式,对于大部分人来说,利用第三方的包来操作对应的文件是最佳选择,比如office文件用python-docx,openpyxl,图片用Python PIL等等。
   你的mp3是音频文件,你想播放还是编辑,可以找相关的第三方包,这个我不熟,就不推荐合适的包了。

陈书书书 发表于 2020-5-16 20:56:00

永恒的蓝色梦想 发表于 2020-5-16 15:50
我第一次听说有人拿文本编码解二进制流

这是个小甲鱼课后题的例子,课后题就是没用二进制流却通过了,我敲的一样却没有通过。疑惑的是这个原理性问题

永恒的蓝色梦想 发表于 2020-5-16 20:56:43

陈书书书 发表于 2020-5-16 20:56
这是个小甲鱼课后题的例子,课后题就是没用二进制流却通过了,我敲的一样却没有通过。疑惑的是这个原理性 ...

我觉得是运气问题

陈书书书 发表于 2020-5-16 20:57:37

txxcat 发表于 2020-5-16 16:32
对于python的open来说,文件只有两种,一个文本格式,一种非文本格式(也可以叫二进制文件,不过严格意 ...

不是播放也不是编辑,就是跟着课后题练习把这个文件输出一下。不过还是非常感谢您的回答~

陈书书书 发表于 2020-5-16 20:59:26

永恒的蓝色梦想 发表于 2020-5-16 20:56
我觉得是运气问题

哈哈,好的好的
页: [1]
查看完整版本: 用打开文本文件形式打开音乐文件报错