【发布时间】:2018-09-15 14:20:03
【问题描述】:
我正在尝试打开一个密码数据库文件(由一堆常用密码组成),但出现以下错误:
到目前为止的尝试.. 代码:
f = open("crackstation-human-only.txt", 'r')
for i in f:
print(i)
错误代码:
Traceback (most recent call last):
File "C:\Users\David\eclipse-workspace\Kaplin\password_cracker.py", line 3, in <module>
for i in f:
File "C:\Users\David\AppData\Local\Programs\Python\Python37\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 753: character maps to <undefined>
在做了一些研究之后,我被告知尝试encoding = 'utf-8',后来我发现这基本上是在猜测并希望文件会显示所有输出
代码:
f = open("crackstation-human-only.txt", 'r', encoding = 'utf-8')
for i in f:
print(i)
错误:
Traceback (most recent call last):
File "C:\Users\David\eclipse-workspace\Kaplin\password_cracker.py", line 3, in <module>
for i in f:
File "C:\Users\David\AppData\Local\Programs\Python\Python37\lib\codecs.py", line 322, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe4 in position 5884: invalid continuation byte
收到此错误消息后,建议我尝试下载类似'Sublime Text 3'的文本编辑器,并打开控制台端输入命令'Encoding()',但不幸的是无法检测到编码。
我的教授能够使用 bash 来“grep cat”文件中的行(老实说,我对 bash 知之甚少,所以如果其他人知道这些术语,我不确定这是否会帮助他们)
如果有人对我可以做些什么来解决这个问题有任何建议,我将不胜感激。
如果有人有兴趣查看文件中的字符类型,我将发布文本文档的链接。
Link to the file, it's a .txt from my school/professors domain
更新:
我有一个运行基本操作系统的同学,他正在使用终端编写他的 python 程序,该程序将遍历文件,并且他使用编码“latin-1”,他能够输出更多字符比我,我在 Windows 10 上,对我的所有脚本都使用 Eclipse-atom。
所以似乎有些东西导致我可能无法根据这些因素获得正确的输出,我猜是因为根据结果看起来就是这样,
我将安装elementary-os 并尝试那里的所有解决方案,看看我是否可以解决这个文件。我会尽快添加另一个更新!
【问题讨论】:
-
你应该在打开文件后读取它,比如
f.read(),否则你正在尝试读取file实例。 -
有一个编码自动检测工具。试试看:pypi.org/project/chardet
-
尝试使用
f.read()或f.readlines()阅读。您实际上是在尝试从文件实例中获取元素,而不是从实例中的数据。 -
您是否尝试过像
'latin-1'这样的不同编码?如果charmap和utf-8都失败了,那么你应该尝试不同的...
标签: python python-3.x character-encoding