鱼C论坛

 找回密码
 立即注册
查看: 1753|回复: 7

[已解决]28课指针tell()

[复制链接]
发表于 2021-11-22 23:43:16 | 显示全部楼层 |阅读模式

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

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

x
为什么我的f.tell(5)是13,不是9啊,和小甲鱼的视频里面操作的没撒区别吧
最佳答案
2021-11-23 10:08:39
本帖最后由 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然后保存就可以了。
微信截图_20211122234157.png
微信截图_20211122234141.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-23 00:01:46 | 显示全部楼层
本帖最后由 jackz007 于 2021-11-23 00:50 编辑

       你读的是 5 个字符,在 Linux 系统下,每个汉字占用 3 个字节,从文件中读出的 5 个字符中有 4 个汉字,1 个 ASCII 字符,其字节数为 3 * 4 + 1= 13,ftell() 返回的是文件指针位置,其单位正是字节数,所以,是 13
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-23 09:19:23 From FishC Mobile | 显示全部楼层
你的文件编码应该是utf8,每个汉子3字节,一个英文冒号1字节,所以加起来13字节。小甲鱼的文件应该是gbk编码的,每个汉子2字节,英文冒号1字节,加起来9字节。你可以在记事本的菜单里另存为,选gbk再编码试试。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-23 09:26:48 | 显示全部楼层
hrpzcf 发表于 2021-11-23 09:19
你的文件编码应该是utf8,每个汉子3字节,一个英文冒号1字节,所以加起来13字节。小甲鱼的文件应该是gbk编 ...

文件另存为没有看到可选编码有gbk,里面都是utf之类的,这个要单独下载吗?而且有点奇怪,为什么我直接open打开不行,必须要加utf-8才能 open()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-23 09:27:42 | 显示全部楼层
jackz007 发表于 2021-11-23 00:01
你读的是 5 个字符,在 Linux 系统下,每个汉字占用 3 个字节,从文件中读出的 5 个字符中有 4 个汉 ...

可以明白,但是为什么没看到小甲鱼设置什么,直接输出就是9呢,书上写的也是一个汉字代表两个字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-23 09:38:04 From FishC Mobile | 显示全部楼层
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的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-23 10:08:39 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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然后保存就可以了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-23 23:18:25 | 显示全部楼层
txxcat 发表于 2021-11-23 10:08
小甲鱼做视频的时候用的是windows7,默认中文文本文件的编码是GBK,又叫CP936,每个汉字2个字节, ...

OKOK
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 20:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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