28课指针tell()
为什么我的f.tell(5)是13,不是9啊,和小甲鱼的视频里面操作的没撒区别吧{:5_94:} 本帖最后由 jackz007 于 2021-11-23 00:50 编辑你读的是 5 个字符,在 Linux 系统下,每个汉字占用 3 个字节,从文件中读出的 5 个字符中有 4 个汉字,1 个 ASCII 字符,其字节数为 3 * 4 + 1= 13,ftell() 返回的是文件指针位置,其单位正是字节数,所以,是 13 你的文件编码应该是utf8,每个汉子3字节,一个英文冒号1字节,所以加起来13字节。小甲鱼的文件应该是gbk编码的,每个汉子2字节,英文冒号1字节,加起来9字节。你可以在记事本的菜单里另存为,选gbk再编码试试。 hrpzcf 发表于 2021-11-23 09:19
你的文件编码应该是utf8,每个汉子3字节,一个英文冒号1字节,所以加起来13字节。小甲鱼的文件应该是gbk编 ...
文件另存为没有看到可选编码有gbk,里面都是utf之类的,这个要单独下载吗?而且有点奇怪,为什么我直接open打开不行,必须要加utf-8才能 open() jackz007 发表于 2021-11-23 00:01
你读的是 5 个字符,在 Linux 系统下,每个汉字占用 3 个字节,从文件中读出的 5 个字符中有 4 个汉 ...
可以明白,但是为什么没看到小甲鱼设置什么,直接输出就是9呢,书上写的也是一个汉字代表两个字符 plovelove 发表于 2021-11-23 09:26
文件另存为没有看到可选编码有gbk,里面都是utf之类的,这个要单独下载吗?而且有点奇怪,为什么我直接op ...
with open("a.txt", "rt", encoding="utf-8") as f:
text = f.read()
with open("a.txt", "wt", encoding="gbk") as g:
g.write(text)
执行以上代码就能把文件编码转换为gbk,但是如果你在shell上执行的话要一行一行地执行,缩进不能错。
执行完以后文件编码就是gbk了,再试试tell的结果。 本帖最后由 txxcat 于 2021-11-23 10:10 编辑
plovelove 发表于 2021-11-23 09:27
可以明白,但是为什么没看到小甲鱼设置什么,直接输出就是9呢,书上写的也是一个汉字代表两个字符
小甲鱼做视频的时候用的是windows7,默认中文文本文件的编码是GBK,又叫CP936,每个汉字2个字节,现在用的系统Windows10,默认中文文本文件编码是UTF-8,每个汉字3个字节。Python3.X本身虽然默认使用UTF-8,但为了兼容,open命令中默认(不加参数时)打开中文文本文件还是使用的GBK,所以打开在Windows10中创建的文本文件需要指定编码UTF-8。
现在你已经知道为什么小甲鱼的是9你的是13了,没必要继续纠结这个问题了,只是以后留意涉及到文本文件操作时自行加上指定UTF-8的代码就行了。
PS:Windwos下知道文件编码很简单,用记事本打开后,点击,文件-另存为,下面就有编码,需要转换成GBK编码就在这里选择ANSI然后保存就可以了。 txxcat 发表于 2021-11-23 10:08
小甲鱼做视频的时候用的是windows7,默认中文文本文件的编码是GBK,又叫CP936,每个汉字2个字节, ...
OKOK
页:
[1]