鱼C论坛

 找回密码
 立即注册
查看: 2667|回复: 6

[已解决]第28讲0. 尝试将文件( OpenMe.mp3 (700 Bytes, 下载次数: 8588) )打...

[复制链接]
发表于 2019-4-23 16:27:47 | 显示全部楼层 |阅读模式

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

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

x
打开小甲鱼老师给的文件后
打印报错 新手求助为什么呀

报错内容File "<stdin>", line 1, in <module>
  File "/Users/chenxu/miniconda3/lib/python3.7/codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
最佳答案
2019-4-23 17:01:12
本帖最后由 jackz007 于 2019-4-23 17:08 编辑

       是文件编码出的问题。
       'openme.mp3' 是一个文本文件,其内容包括非 utf-8 编码的中文字符,与 Linux 系统不能兼容。所以,打开文件的时候,应该把编码加上。
  1. f=open('/users/chenxu/desktop/openme.mp3')
复制代码

      改成下面这样试试看
  1. f = open('/users/chenxu/desktop/openme.mp3' , "rt" , encoding = "cp936")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-4-23 16:33:27 | 显示全部楼层
学会提出完整问题。
提供你的源代码和报错信息
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-23 16:49:38 | 显示全部楼层
源代码:
f=open('/users/chenxu/desktop/openme.mp3')
for i in f:
        print(i)
报错信息:Traceback (most recent call last):
  File "/Users/chenxu/Desktop/017.py", line 2, in <module>
    for i in f:
  File "/Users/chenxu/miniconda3/lib/python3.7/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
[Finished in 0.0s with exit code 1]
[cmd: ['/Users/chenxu/miniconda3/bin/python3', '-u', '/Users/chenxu/Desktop/017.py']]
[dir: /Users/chenxu/Desktop]
[path: /Users/chenxu/miniconda3/bin:/Users/chenxu/miniconda3/condabin:/miniconda2/bin:/miniconda3/bin:/miniconda3/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-23 17:01:12 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-4-23 17:08 编辑

       是文件编码出的问题。
       'openme.mp3' 是一个文本文件,其内容包括非 utf-8 编码的中文字符,与 Linux 系统不能兼容。所以,打开文件的时候,应该把编码加上。
  1. f=open('/users/chenxu/desktop/openme.mp3')
复制代码

      改成下面这样试试看
  1. f = open('/users/chenxu/desktop/openme.mp3' , "rt" , encoding = "cp936")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-23 18:11:28 | 显示全部楼层
jackz007 发表于 2019-4-23 17:01
是文件编码出的问题。
       'openme.mp3' 是一个文本文件,其内容包括非 utf-8 编码的中文字符, ...

谢谢大神。加了那个就可以打开了,后面那个“cp936”
是什么意思啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-23 18:34:10 | 显示全部楼层
sysumax 发表于 2019-4-23 18:11
谢谢大神。加了那个就可以打开了,后面那个“cp936”
是什么意思啊

“cp936” 是一种中文编码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-23 18:52:11 | 显示全部楼层
链接:https://www.zhihu.com/question/35609295/answer/63780022
来源:知乎


CP936和UTF-8本身和Python是毫无关联的。
CP936其实就是GBK,IBM在发明Code Page的时候将GBK放在第936页,所以叫CP936。

至于GBK,百度百科就说的很清楚了:GBK全称《汉字内码扩展规范》(GBK即“国标”、“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Specification) ,中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订,国家技术监督局标准化司、电子工业部科技与质量监督司1995年12月15日联合以技监标函1995 229号文件的形式,将它确定为技术规范指导性文件。这一版的GBK规范为1.0版。
而UTF-8: UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。

所以GBK和UTF-8简单的来说,区别就是编码方式不同,表示的文字范围不同。(UTF-8能表示更多的语言文字,更加通用)在Python里面,你需要注意你Python本身是否声明了字符编码类型(尤其是Py 2x),例如:#-- coding: UTF-8 --
以及,你是如何从外部文件或者网页读入字符的,他们的源编码类型是什么
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-10 03:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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