庸臃 发表于 2019-12-24 17:43:24

python入门28的作业 打开MP3

求大神帮帮忙!!!!!谢谢
python入门28的作业 打开MP3我直接下载,复制了代码也不能直接打开文件
报错如下
Traceback (most recent call last):
File "C:/Users/18190/Desktop/python/28/读文件.py", line 2, in <module>
    for each_line in f:
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'CP_UTF8' codec can't decode byte 0xb3 in position 0: No mapping for the Unicode character exists in the target code page.
>>>

jackz007 发表于 2019-12-24 18:36:07

本帖最后由 jackz007 于 2019-12-24 18:38 编辑

      这个 mp3 文件实际上是一个含有中文字符的文本文件,打开文件的语句加上 encoding 选项试试,就像下面这样:
      f = open(<mp3 file> , encoding='UTF-8')

zltzlt 发表于 2019-12-24 20:23:19

文件中有中文,需要调整编码。

解决方法:

把打开文件的语句改成这样:

f = open('<filename>', encoding='utf-8')    # 加上 encoding 参数

杨林涛 发表于 2019-12-25 08:38:14

需要添加文件存放的路径名称,比如OpenMe.mp3存放在E盘中,那么对应程序应该是
f = open('E:\\OpenMe.mp3')

wp231957 发表于 2019-12-25 08:50:00

jackz007 发表于 2019-12-24 18:36
这个 mp3 文件实际上是一个含有中文字符的文本文件,打开文件的语句加上 encoding 选项试试,就像下 ...

这就是一个大坑,哪有用mp3做扩展名的文本文件呢

庸臃 发表于 2019-12-25 14:06:14

杨林涛 发表于 2019-12-25 08:38
需要添加文件存放的路径名称,比如OpenMe.mp3存放在E盘中,那么对应程序应该是
f = open('E:\\OpenMe.mp3' ...

试过了 也不行哦

庸臃 发表于 2019-12-25 14:14:18

jackz007 发表于 2019-12-24 18:36
这个 mp3 文件实际上是一个含有中文字符的文本文件,打开文件的语句加上 encoding 选项试试,就像下 ...

f = open('OpenMe.mp3', encoding='UTF-8')
这样么?又报错了呢{:10_266:}
Traceback (most recent call last):
File "C:/Users/18190/Desktop/python/28/读文件.py", line 2, in <module>
    for each_line in f:
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 0: invalid start byte

jackz007 发表于 2019-12-25 14:43:46

庸臃 发表于 2019-12-25 14:14
f = open('OpenMe.mp3', encoding='UTF-8')
这样么?又报错了呢
Traceback (most recent cal ...

         再试试这个:
f = open('OpenMe.mp3', encoding='cp936')

庸臃 发表于 2019-12-25 16:38:17

jackz007 发表于 2019-12-25 14:43
再试试这个:
f = open('OpenMe.mp3', encoding='cp936')

谢谢你 可以了 请问是什么原理呢?

jackz007 发表于 2019-12-25 21:19:40

      python 在读取文本文件的时候,需要对读到的每一个字节进行解码,如果打开文件的时候没有指定文件中的字符编码,python 就会按缺省参数进行解码,在 Windows 操作系统平台,缺省编码参数是 'GBK',在 Linux 操作系统下,缺省编码参数是 'UTF-8',显然,如果这个参数与文件实际采用的字符编码不一致,读取文件的时候,就会发生编码错误,这个时候,唯一有效的解决方案,就是在打开文件的时候,提供正确的 encoding 参数。

庸臃 发表于 2019-12-25 22:10:27

jackz007 发表于 2019-12-25 21:19
python 在读取文本文件的时候,需要对读到的每一个字节进行解码,如果打开文件的时候没有指定文件 ...

谢谢你{:5_109:}

kristen02 发表于 2020-5-22 17:27:06

赞,解决了我的问题
页: [1]
查看完整版本: python入门28的作业 打开MP3