鱼C论坛

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

关于028讲的问题

[复制链接]
发表于 2020-2-29 10:45:53 | 显示全部楼层 |阅读模式

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

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

x
课件中打开一个文档我开始偷懒文档中只输入了123456后来写了首诗进去
直接f.read()错误提示是gbk之类的然后查了下在打开文件的时候加上了encoding = 'utf-8'
这里我有两个疑问
1.视频中小甲鱼的encoding = cp396的为什么他可以正常的打开,是因为他的文档不是纯汉字的原因吗
2.当我按照encoding = 'utf-8'打开文件后f.read(5)返回的是'采菊东篱下',f.tell()返回的是15.这里五个汉字不应该是10个字节吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-29 11:05:53 | 显示全部楼层
本帖最后由 一个账号 于 2020-2-29 11:43 编辑

1. 因为小甲鱼的那个文件的编码是 "cp396",你的文件的编码是 "utf-8"

2. utf-8 编码是 3 个字节。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 11:10:48 | 显示全部楼层
本帖最后由 jackz007 于 2020-2-29 11:19 编辑

      不知道你用的是什么操作系统,如果是 Windows ,那么,操作系统缺省的汉字编码应该是 GBK,也就是 CP936,就是说,在 Windows 下编辑产生的文本文件都是这种编码。如果你使用 Linux 操作系统,那么,这个系统中文字符采用 UTF-8 编码,编辑产生的文本文件编码一律是 UTF-8,UTF-8 编码的文件在 Windows 系统打开看到的是一堆乱码,同样,GBK 编码的文件在 Linux 下显示也是一堆乱码。
       如果你在 Windows 平台上使用 Python,那么,缺省汉字编码是 GBK,就是说,如果 open() 不加 encoding 选项,那么,Python 就会按照 GBK 来解码和识别文本文件中的字符,同理,Linux 平台会按 UTF-8 编码来做同样的事情,但是,一旦文件编码与这个约定不符,那就必须用 open() 加 encoding 选项的方式,把文本文件实际的字符编码名称告诉 Python,否则,必然出现常见的字符编码错误。
       每个汉字的确占用 2 个字节,但是,Python 内部采用的是 Unicode 编码,通过 len() 得到的是字符个数,而非字节长度。Unicode 编码不是以字节,而是以整个字符编码为基本单位的,所以,一个汉字就是一个字符。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-29 11:18:49 | 显示全部楼层
一个账号 发表于 2020-2-29 11:05
1. 因为小甲鱼的那个文件的编码是 "cp396",你的文件的编码是 "utf-8"

2. 每台电脑都可能不一样。

我查了下utf-8编码下一个汉字3个字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-29 11:19:22 | 显示全部楼层
jackz007 发表于 2020-2-29 11:10
不知道你用的是什么操作系统,如果是 Windows ,那么,操作系统缺省的汉字编码应该是 GBK,也就是 CP ...

我查了下utf-8编码下一个汉字3个字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 11:20:36 | 显示全部楼层
Noendforstudy 发表于 2020-2-29 11:19
我查了下utf-8编码下一个汉字3个字节


      没错,但是我说过,通过 len() 得到的是字符个数,而不是字节个数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 11:28:08 | 显示全部楼层
本帖最后由 jackz007 于 2020-2-29 11:29 编辑
Noendforstudy 发表于 2020-2-29 11:19
我查了下utf-8编码下一个汉字3个字节


      正是因为你的文件采用的是 UTF-8 编码,读取 5 个汉字后,f . tell() 得到的数值才会是 15。但是,UTF-8 文件通常都有 BOM,就是文件开头的 3 个字节的内容是 UTF-8 编码识别标志,也许你这个文件里没有这个 BOM ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 19:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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