如何使用python读取从web复制到txt文件的文本

时间:2016-03-26 13:51:28

标签: python encoding utf-8

我正在学习如何阅读文本文件。我用这种方式:

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

但它仍然无效。

2 个答案:

答案 0 :(得分:0)

我假设您使用的是来自openprint语法的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)

确保使用正确的编码打开文件。