鱼C论坛

 找回密码
 立即注册
查看: 1860|回复: 10

[已解决]python3默认编码问题

[复制链接]
发表于 2018-1-30 20:00:44 | 显示全部楼层 |阅读模式

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

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

x
我用的是mac 的os x系统,python版本是python3.6.3

网上说python2 默认编码 ascii---------python3默认编码是utf-8

我的文本是utf-8编码格式,可是却显示ascii 解码错误,请问哪里除了问题 呢?
最佳答案
2018-1-30 23:19:37
本帖最后由 orino 于 2018-1-30 23:46 编辑

照你的内容,0xe68891对应的是utf-8的汉字 '我',看上去是utf-8编码的,你指定用utf-8试试,也就是f=open(name, encoding='utf-8')试试,感觉是操作系统默认字符集的问题,你试试直接f=open(name),然后print(f),看默认是什么字符集打开的,如果是ascii说明是系统默认字符集的问题
python encode.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-1-30 20:08:50 | 显示全部楼层
本帖最后由 alltolove 于 2018-1-30 20:11 编辑

因为你的那个txt文件是ascii码,它用utf-8解码肯定会出错(你查的那个可信度只有0.99)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-30 20:08:53 | 显示全部楼层
你试试用rb打开后再看看文件是什么字符集的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-30 20:17:55 | 显示全部楼层
本帖最后由 orino 于 2018-1-30 20:52 编辑

准确而言,你前面用rb模式去判断编码是不合适的,因为对于二进制数据而言,不存在字符集编码的说法,只有对于文本而言,也就是rw模式才能说是什么编码的,所以你前面输出utf-8是有问题的,既然是ascii的,那就要在读取的时候指定编码为ascii编码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-30 23:05:23 | 显示全部楼层
orino 发表于 2018-1-30 20:08
你试试用rb打开后再看看文件是什么字符集的

>>> f.read()
b'\xe6\x88\x91\xe6\x98\xaf\xe4\xbe\x9d\xe4\xbe\x9d\n'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-30 23:07:03 | 显示全部楼层
orino 发表于 2018-1-30 20:17
准确而言,你前面用rb模式去判断编码是不合适的,因为对于二进制数据而言,不存在字符集编码的说法,只有对 ...

1223.txt里面全部是中文,英文使用ascii编码,我也不知道哪里出问题了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-30 23:08:11 | 显示全部楼层
alltolove 发表于 2018-1-30 20:08
因为你的那个txt文件是ascii码,它用utf-8解码肯定会出错(你查的那个可信度只有0.99)

可信度0.99,不是很高了码,txt里面全部是中文,不应该是ascii编码啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-30 23:19:37 | 显示全部楼层    本楼为最佳答案   
本帖最后由 orino 于 2018-1-30 23:46 编辑

照你的内容,0xe68891对应的是utf-8的汉字 '我',看上去是utf-8编码的,你指定用utf-8试试,也就是f=open(name, encoding='utf-8')试试,感觉是操作系统默认字符集的问题,你试试直接f=open(name),然后print(f),看默认是什么字符集打开的,如果是ascii说明是系统默认字符集的问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-31 00:07:38 | 显示全部楼层
我之前遇到这个问题,直接引用了 codecs 模块,使用 codecs.open(fileName, 'r', 'UTF-8') 去打开文件。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-31 10:25:57 | 显示全部楼层
orino 发表于 2018-1-30 23:19
照你的内容,0xe68891对应的是utf-8的汉字 '我',看上去是utf-8编码的,你指定用utf-8试试,也就是f=open(n ...

>>> f = open('/Users/Will/Desktop/1223.txt')
>>> print(f)
<_io.TextIOWrapper name='/Users/Will/Desktop/hj.txt' mode='r' encoding='US-ASCII'>

应该是系统默认字符编码ascii,我在系统下建立了一个test_file.py文件(我也不清楚这样说对不对哈)
def read_file(file_path):
    with open(file_path, 'r') as h:
        a = h.read()
        print(a)

read_file('/Users/Will/Desktop/1223.txt')
然后终端里面:输入 ‘python3 test_file.py’ ,完美运行,所以应该是系统默认字符集是ascii编码,谢谢哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-31 10:27:12 | 显示全部楼层
发强 发表于 2018-1-31 00:07
我之前遇到这个问题,直接引用了 codecs 模块,使用 codecs.open(fileName, 'r', 'UTF-8') 去打开文件。。

谢谢,已经明白怎么回事啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-6 14:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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