What does the position number mean in this UnicodeError : 'gbk' codec can't decode byte 0x91 in position 2196”
What does the position number mean in this UnicodeError : 'gbk' codec can't decode byte 0x91 in position 2196”
当我尝试操作数据时,我经常会想到它,例如 "UnicodeDecodeError: 'gbk' codec can't decode byte 0x91 in position 2196: illegal multibyte sequence"。
我找到了绕过这个错误的方法,但我的好奇心驱使我调查 2196 位置的内容。
问题来了:
如何理解2196这个数字?我的意思是当我从 1,2,...,2196 开始计数时应该使用什么编码。 utf-8?国标?二进制?十六进制还是其他?
我怎样才能在不抛出错误的情况下看到那个位置的数字?
这里以代码部分为例:
with open(r"G:\ETCDataaMTC19-06-01.txt", "r") as fp:
for i, line in enumerate(fp):
if i == 6:
pass
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-2-6810d8c84b34> in <module>()
1 with open(r"G:\ETCDataaMTC19-06-01.txt", "r") as fp:
----> 2 for i, line in enumerate(fp):
3 if i == 6:
4 pass
UnicodeDecodeError: 'gbk' codec can't decode byte 0x91 in position 2196: illegal multibyte sequence
您需要在打开文件时指定正确的编码。尝试将此添加到 open
命令:
with open(r"G:\ETCDataaMTC19-06-01.txt", "r", encoding="utf-8") as fp:
for i, line in enumerate(fp):
if i == 6:
pass
Re number 2196 - 它只是说它无法正确读取位置 2196 中的符号。它实际上是符号在该行开头的行中的位置。
要查看它,请检查错误期间 line
的值是什么,然后使用任何文本编辑器打开 txt
文件。找到直线并找到符号。
这里的问题是,解码函数是从 io 系统的内部调用的。 2196 是读取缓冲区中有问题的字节的位置。如果您的文件足够短,可以在单个块中读取,或者如果错误发生在第一个块上,那么它就是字节在文件中的位置。在任何其他情况下,将很难猜测字节在文件中的真实位置。
BTW b'\x91'
是 cp1252 字符集中的左单引号 unicode U+2018 ‘
。
当我尝试操作数据时,我经常会想到它,例如 "UnicodeDecodeError: 'gbk' codec can't decode byte 0x91 in position 2196: illegal multibyte sequence"。
我找到了绕过这个错误的方法,但我的好奇心驱使我调查 2196 位置的内容。
问题来了:
如何理解2196这个数字?我的意思是当我从 1,2,...,2196 开始计数时应该使用什么编码。 utf-8?国标?二进制?十六进制还是其他? 我怎样才能在不抛出错误的情况下看到那个位置的数字?
这里以代码部分为例:
with open(r"G:\ETCDataaMTC19-06-01.txt", "r") as fp:
for i, line in enumerate(fp):
if i == 6:
pass
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-2-6810d8c84b34> in <module>()
1 with open(r"G:\ETCDataaMTC19-06-01.txt", "r") as fp:
----> 2 for i, line in enumerate(fp):
3 if i == 6:
4 pass
UnicodeDecodeError: 'gbk' codec can't decode byte 0x91 in position 2196: illegal multibyte sequence
您需要在打开文件时指定正确的编码。尝试将此添加到 open
命令:
with open(r"G:\ETCDataaMTC19-06-01.txt", "r", encoding="utf-8") as fp:
for i, line in enumerate(fp):
if i == 6:
pass
Re number 2196 - 它只是说它无法正确读取位置 2196 中的符号。它实际上是符号在该行开头的行中的位置。
要查看它,请检查错误期间 line
的值是什么,然后使用任何文本编辑器打开 txt
文件。找到直线并找到符号。
这里的问题是,解码函数是从 io 系统的内部调用的。 2196 是读取缓冲区中有问题的字节的位置。如果您的文件足够短,可以在单个块中读取,或者如果错误发生在第一个块上,那么它就是字节在文件中的位置。在任何其他情况下,将很难猜测字节在文件中的真实位置。
BTW b'\x91'
是 cp1252 字符集中的左单引号 unicode U+2018 ‘
。