鱼C论坛

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

open打开txt文档,提示编码错误

[复制链接]
发表于 2019-2-20 15:49:19 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 山无棱 于 2019-2-20 16:04 编辑

最近在学习open打开windows自带的txt文档,遇到编码问题,麻烦大神解答一下,谢谢

  1. # coding:utf-8
  2. f = open('news.txt')
  3. for line in f:
  4.     print(line)
复制代码


news.txt本身是utf-8编码文件,运行上述代码后:结果错误提示如下:

Snap3.jpg

从错误提示来看是编解码出问题了,通过查询资料,代码改成如下(在open里面encoding参数设置为‘utf-8’),可以正常打开utf-8编码的news.txt文档

  1. # coding:utf-8
  2. f = open('news.txt',encoding='utf-8')
  3. for line in f:
  4.     print(line)
复制代码

截图.PNG


另外:把news.txt文档改成ansi默认编码方式,运行下面代码也是正常:
  1. # coding:utf-8
  2. f = open('news.txt')
  3. for line in f:
  4.     print(line)
复制代码


我的问题:网上查了些材料,但还有疑问

1、windows下记事本(txt文档)ansi编码为系统本地编码,而open()函数的encoding参数默认是本地编码,所以用ansi编码去打开utf-8编码的txt会提示出错,所以需要在open()函数的encoding参数设置为utf-8,  所以上面把news.txt文档改成ansi默认编码方式后,open()里面不用设置encoding=utf-8,默认就是用anis去打开txt,所以能正常打开,
问题来了:那第一行的申明# coding:utf-8:是只针对包括在.py里面的源代码,而不包括open里面涉及到的以什么样的方式打开txt文档吗

2.另外python3版本以后,默认编码方式就是utf-8,不申明应该也是正常运行的,是不是python3以后不需要申明了

python3默认的编码方式:
3333.PNG
  1. f = open('news.txt',encoding='utf-8')
  2. for line in f:
  3.     print(line)
复制代码


运行结果,正常:

news.rar

657 Bytes, 下载次数: 1

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-2-20 15:56:57 | 显示全部楼层
py3一般不需要声明
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-20 17:04:56 | 显示全部楼层
window操作系统是gbk编码,用open需要指定编码为utf8,在linux或mac上没有这个问题,因为它们的操作系统编码为utf8
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-20 17:17:16 | 显示全部楼层
幽梦三影 发表于 2019-2-20 17:04
window操作系统是gbk编码,用open需要指定编码为utf8,在linux或mac上没有这个问题,因为它们的操作系统编 ...

那第一行的申明# coding:utf-8:是只针对包括在.py里面的源代码,而不包括open里面涉及到的以什么样的方式打开txt文档吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-20 17:36:05 | 显示全部楼层
山无棱 发表于 2019-2-20 17:17
那第一行的申明# coding:utf-8:是只针对包括在.py里面的源代码,而不包括open里面涉及到的以什么样的方 ...

# coding:utf-8就等价于open("xxx.txt", encoding="utf8")
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-20 17:38:53 | 显示全部楼层
幽梦三影 发表于 2019-2-20 17:36
# coding:utf-8就等价于open("xxx.txt", encoding="utf8")

那这样打开为什么会不行呢?
  1. # coding:utf-8
  2. f = open('news.txt')
  3. for line in f:
  4.     print(line)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-20 17:59:41 | 显示全部楼层
山无棱 发表于 2019-2-20 17:38
那这样打开为什么会不行呢?

sorry,解释错了,# coding:utf-8是为了解决python2的编码问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 03:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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