python-3.x - 为什么 file.tell() 会影响编码?

标签 python-3.x file-io character-encoding gbk

调用tell()在读取我的 GBK 编码文件时会导致下一次调用 readline()提出 UnicodeDecodeError .但是,如果我不调用 tell() ,它不会引发此错误。

C:\tmp>hexdump badtell.txt

000000: 61 20 6B 0D 0A D2 BB B0-E3                       a k......

C:\tmp>类型 test.py
with open(r'c:\tmp\badtell.txt', "r", encoding='gbk') as f:
    while True:
        pos = f.tell()
        line = f.readline();
        if not line: break
        print(line)

C:\tmp>python test.py
a k

Traceback (most recent call last):
  File "test.py", line 4, in <module>
    line = f.readline();
UnicodeDecodeError: 'gbk' codec can't decode byte 0xd2 in position 0:  incomplete multibyte sequence

当我删除 f.tell()声明,它成功解码。为什么?
我在Win7/Win10上试过Python3.4/3.5 x64,都一样。

任何一个,任何想法?我应该报告错误吗?

我有一个大文本文件,我真的很想得到这个大文本的文件位置范围,有解决方法吗?

最佳答案

好的,有一个解决方法,它到目前为止有效:

with open(r'c:\tmp\badtell.txt', "rb") as f:
    while True:
        pos = f.tell()
        line = f.readline();
        if not line: break
        line = line.decode("gbk").strip('\n')
        print(line)

我昨天在这里提交了一个问题:http://bugs.python.org/issue26990

仍然没有回应

关于python-3.x - 为什么 file.tell() 会影响编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37128454/

相关文章:

python - 在循环中创建实例变量返回 None 对象

utf-8 - UTF-8 可以编码多少个字符?

ruby-on-rails-3 - 用于解决Rails 3中无效的多字节字符(US-ASCII)的全局设置

python - 使用 BeautifulSoup 抓取网站时出现字符编码问题

具有多种功能的python编程

python-3.x - 在 Docker 镜像中安全地存储哈希

bash - 在 bash 的 5,000 个目录中创建 5,000,000,000 个空文件的最快方法

java - 使用不同的 IO 流写入/读取文件的正确方法是什么

c - 尝试为文件 IO : 创建多个线程时出现段错误

python-3.x - 您可以在 tkinter 的一个网格单元中放置多个按钮吗?