Python 读取文件时出现UnicodeEncodeError

Python 读取文件时出现UnicodeEncodeError,python,python-3.x,unicode,character-encoding,Python,Python 3.x,Unicode,Character Encoding,我正在尝试从rockyou单词列表中读取并将>=8个字符的所有单词写入一个新文件 这是代码- def main(): with open("rockyou.txt", encoding="utf8") as in_file, open('rockout.txt', 'w') as out_file: for line in in_file: if len(line.rstrip()) < 8: continue

我正在尝试从rockyou单词列表中读取并将>=8个字符的所有单词写入一个新文件

这是代码-

def main():
    with open("rockyou.txt", encoding="utf8") as in_file, open('rockout.txt', 'w') as out_file:
        for line in in_file:
            if len(line.rstrip()) < 8:
                continue
            print(line, file = out_file, end = '')
        print("done")

if __name__ == '__main__':
    main()
def main():
将“open”(“rockyou.txt”,encoding=“utf8”)作为in_文件打开,将(“rockout.txt”,“w”)作为out_文件打开:
对于\u文件中的行:
如果len(line.rstrip())小于8:
持续
打印(行,文件=输出文件,结束=“”)
打印(“完成”)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
有些单词不是utf-8

回溯(最近一次呼叫最后一次):
文件“wpa_rock.py”,第10行,在
main()
文件“wpa_rock.py”,第6行,主目录
打印(行,文件=输出文件,结束=“”)
文件“C:\Python\lib\encodings\cp1252.py”,第19行,编码
返回codecs.charmap\u encode(输入、自身错误、编码表)[0]
UnicodeEncodeError:“charmap”编解码器无法将字符“\u0e45”编码到位
0:字符映射到

更新

def main():
with open("rockyou.txt", encoding="utf8") as in_file, open('rockout.txt', 'w', encoding="utf8") as out_file:
    for line in in_file:
        if len(line.rstrip()) < 8:
            continue
        out_file.write(line)
    print("done")

if __name__ == '__main__':
    main()```
def main():
将open(“rockyou.txt”,encoding=“utf8”)作为in_文件打开,将(“rockout.txt”,“w”,encoding=“utf8”)作为out_文件打开:
对于\u文件中的行:
如果len(line.rstrip())小于8:
持续
输出文件。写入(行)
打印(“完成”)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()```
回溯(最近一次呼叫最后一次):
文件“wpa_rock.py”,第10行,在
main()
文件“wpa_rock.py”,第3行,主目录
对于\u文件中的行:
文件“C:\Python\lib\codecs.py”,第321行,解码
(结果,消耗)=自身缓冲区解码(数据,自身错误,最终)
UnicodeDecodeError:“utf-8”编解码器无法解码位置933:无效的字节0xf1

d延续字节

在写入
输出文件
(in
print()
)过程中,您的
UnicodeCodeer错误:“charmap”
发生错误

默认情况下,
open()
使用
locale.getpreferredencoding()
,这是Windows上的ANSI代码页(例如
cp1252
),不能表示所有Unicode字符,尤其是
'\u0e45'
字符
cp1252
是一种单字节编码,最多可以表示256个不同的字符,但有一百万个(
1114111
)Unicode字符。它不能代表所有人

传递可以表示所有所需数据的
编码
,例如
编码
必须工作(as)-如果您的代码读取
utf-8
数据时没有任何错误,那么代码也应该能够使用
utf-8
写入数据


您的
unicodedecodeer错误:“utf-8”
错误发生在读取\u文件中的
用于\u文件中的行
)时。并非所有字节序列都是有效的utf-8,例如,
os.uradom(100)。解码('utf-8')
可能会失败。要做什么取决于应用程序

如果您希望文件编码为utf-8;您可以传递
errors=“ignore”
open()
参数来忽略偶尔出现的无效字节序列。或者你可以用

如果文件中使用的实际字符编码不同,则应传递实际字符编码<代码>字节
本身没有任何编码,元数据应该来自另一个源(尽管如此),例如,如果文件内容是http正文,请参见


有时,一个坏掉的软件可以生成大部分utf-8字节序列,其中一些字节采用不同的编码方式。您还可以查看它是否对您的情况有帮助,例如。

嘿,我有一个类似的问题,在
rockyou.txt
wordlist的情况下,我尝试了Python必须提供的许多编码,我发现
编码='kio8_'
可以读取文件。

这是一个输入错误。它应该是
utf-8
而不是
utf8
我不知道它是否是。使用这两种方法都会导致相同的错误。在该位置必须有无效字符。您应该显示您试图读取的文件。@Arpan:不,不是。
'utf8'
'utf-8'
都可以工作,一个是另一个的别名。@MarkEvans在打开输出文件时是否尝试添加
encoding=“utf8”
。我现在没有windows计算机,因此无法检查。已更新问题。