从文本文件读取时的Unicode编码

2 投票
2 回答
1014 浏览
提问于 2025-05-10 23:24

我希望你能帮忙。

我正在尝试检查一个字符串是否在一个叫做 PasswordList 的文本文件中。这是我为此写的代码:

Password = input('Enter a password: ')    
with open('PasswordList.txt') as f:
    Found = False
    for line in f:
        if Password in line: 
            print(line)
            Found = True
    if not Found:
        print('Password is not in list')

如果我输入像字母 "e" 这样的字符,它会返回包含这个字母的所有行,直到它到达第 4583 个位置时出现错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0x82 in position 4853: ordinal not in range(128).

我猜这可能跟 ascii 和 unicode 的编码有关,因为 Python 可能在尝试用 ascii 编码来解码一个 unicode 字符?

如果我尝试

print (str((sys.getdefaultencoding())))

那么我得到的默认编码是 "utf-8"。

我现在卡住了,我该怎么办?

相关文章:

  • 暂无相关问题
暂无标签

2 个回答

0

要查看用记事本创建的文件的编码方式,可以先用记事本打开这个文件。然后在菜单里选择“文件 | 另存为”。在弹出的对话框底部,你会看到一个下拉框,里面显示了当前的编码方式(附上截图)。

现在你可以尝试使用wim建议的codecs.open。

在这里输入图片描述

3

使用 io 模块打开文件:

import io
with io.open('PasswordList.txt', encoding='cp1252') as f:
    ...

不过,你需要知道数据的编码格式是什么。文件本身通常不包含这些信息,你得知道它是怎么创建的。

撰写回答