我正在学习如何阅读文本文件。我用这种方式:
f=open("sample.txt")
print(f.read())
如果我自己键入txt文件,它工作正常。但是,当我从网络上的新闻文章复制文本时,它产生了以下错误:
UnicodeEncodeError: 'charmap' codec can't encode charater '\u2014' in position 738: character maps to undefined
我尝试将Notepad ++中的编码设置更改为UTF-8,因为我读到的地方是由于那个
我也尝试过使用:
f=open("sample.txt",encoding='utf-8')
来自here
但它仍然无效。
答案 0 :(得分:0)
我假设您使用的是来自open
和print
语法的Python 3。
犯罪人物u" \ u2014"是一个em-dash —
(ref)。正如我假设您使用的是Windows,可能在UTF8(chcp 65001)中设置控制台可能有助于您使用不太旧的版本。
如果是批处理脚本,并且打印仅用于获取跟踪,则可以使用显式编码,错误='替换'。例如,假设您使用控制台使用代码页850:
print(f.read().encode('cp850', 'replace'))
这将用?
替换所有未映射的字符 - 不是很好,但至少它不会引起...
答案 1 :(得分:0)
您正在使用Windows并尝试打印到控制台。 print()抛出异常。
Windows控制台本身仅支持8位代码页,因此您所在区域以外的任何内容都会中断(尽管人们对chcp 65001的评价如此)。
您需要安装并使用https://github.com/Drekin/win-unicode-console。该模块在低级别与控制台API进行对话,为输入和输出提供对多字节字符的支持。
或者,不要打印到控制台并将输出写入文件,使用编码打开。例如:
with open("myoutput.log", "w", encoding="utf-8") as my_log:
my_log.write(body)
确保使用正确的编码打开文件。