Aufruf tell()
beim Lesen einer GBK-codierten Datei von mir verursacht den nächsten Anruf an readline()
, um eine UnicodeDecodeError
zu erhöhen. Wenn ich jedoch tell()
nicht aufrufen, wird dieser Fehler nicht ausgelöst.Warum beeinflusst file.tell() die Codierung?
C: \ tmp> hexdump badtell.txt
000000: 61 20 6B 0D 0A D2 BB B0-E3 a k......
C: \ tmp> type 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
Wenn ich die f.tell()
Anweisung lösche, dekodiert es erfolgreich. Warum? Ich versuchte Python3.4/3.5 x64 auf Win7/Win10, es ist alles gleich.
Irgendwelche Idee? Soll ich einen Fehler melden?
Ich habe eine große Textdatei, und ich möchte wirklich Dateipositionsbereiche dieses großen Textes erhalten, gibt es einen Workaround?
ich einen großen Text hatte Datei, und ich möchte wirklich Dateiposition Bereiche Teile dieses großen Textes zeigen, gibt es eine Umgehung? danke – mfmain