鱼C论坛

 找回密码
 立即注册
查看: 1042|回复: 17

[已解决]用打开文本文件形式打开音乐文件报错

[复制链接]
发表于 2020-5-16 15:10:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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

是要修改编码格式吗?
最佳答案
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编码的网页则不出现这问题。可以直接访问。


打个比方   音乐文件并不是由一个个汉字 英文 组成的,而这些编码就是用来对应汉字和英文的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-16 15:11:15 | 显示全部楼层
是的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-16 15:13:31 | 显示全部楼层

请指教,怎么修改呢。我加了个encoding='gbk',还是报错的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本身就是GBK编码的才报错的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-16 15:14:31 | 显示全部楼层
陈书书书 发表于 2020-5-16 15:13
请指教,怎么修改呢。我加了个encoding='gbk',还是报错的

默认就是gbk。。所以用gbk读取报错
得改成utf-8
encoding = "utf-8"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-16 15:16:29 | 显示全部楼层
Twilight6 发表于 2020-5-16 15:13
改成用

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

utf-8也不可以,二进制的正常打开了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-16 15:17:46 | 显示全部楼层
陈书书书 发表于 2020-5-16 15:16
utf-8也不可以,二进制的正常打开了

帮助到你的话设置最佳吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 无法解码的东东所以打不开
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-16 15:22:41 | 显示全部楼层
Twilight6 发表于 2020-5-16 15:17
帮助到你的话设置最佳吧

好的,可是还想问一下,utf-8为什么也不可以?如果不想用二进制的话该如何打开呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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编码的网页则不出现这问题。可以直接访问。


打个比方   音乐文件并不是由一个个汉字 英文 组成的,而这些编码就是用来对应汉字和英文的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我第一次听说有人拿文本编码解二进制流
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2020-5-16 20:56:00 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-5-16 15:50
我第一次听说有人拿文本编码解二进制流

这是个小甲鱼课后题的例子,课后题就是没用二进制流却通过了,我敲的一样却没有通过。疑惑的是这个原理性问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我觉得是运气问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-16 20:57:37 | 显示全部楼层
txxcat 发表于 2020-5-16 16:32
对于python的open来说,文件只有两种,一个文本格式,一种非文本格式(也可以叫二进制文件,不过严格意 ...

不是播放也不是编辑,就是跟着课后题练习把这个文件输出一下。不过还是非常感谢您的回答~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-16 20:59:26 | 显示全部楼层

哈哈,好的好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-21 05:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表