零基础书中第八章关于read()的问题
8.14 文件的读取和定位里面说read()是以字节为单位读取的,结果我看了下面关于定位的例子,发现read(5),但是定位到了9。
我再结合表8-2里面对read()方法的描述,是不是觉得书印错了,read()应该是以字符为单位读取的。
求助各位大神啊。 可能老师说的是rb模式下吧 本帖最后由 heidern0612 于 2020-11-17 08:25 编辑
read是以字节为单位读取的,但是众所周知一个汉字是按2个字符算的。
这就导致当你read一个汉字的时候,你没法read到单数字节的情况。
所以大概是为了统一这种规范,read的情况下,一个汉字也算一个字符或字节。
但tell的情况下,就能看到,一个汉字还是2个字节。
所以这里read其实应该总结为每次读取指定字节或字符比较合适。
以上纯属个人见解,胡说八道请见谅。
这个不难理解啊,一个是字符一个是字节。1个中文汉字、中文标点(全角标点)和全角字母数字是1个字符、2个字节
read(x)读取的是x个字符,tell()和seek()是字节
f.read(5) 结果是‘小客服:小’,你算算,小客服小,4个汉字,就是8个字符,英文的冒号,是1个字符
所以f.tell()返回9不是正常的么 以二进制模式打开文件,则read(n)是按字节数n读取,以文本模式打开则是按字符数n读取。 笨鸟学飞 发表于 2020-11-17 09:13
这个不难理解啊,一个是字符一个是字节。1个中文汉字、中文标点(全角标点)和全角字母数字是1个字符、2个 ...
我的问题不在tell返回9
页:
[1]