Python将奇怪的Unicode写入CSV

sir*_*edy 3 python csv unicode

我正在尝试使用python news3k软件包提取文章信息,然后将其写入CSV文件。正确下载信息后,输出到CSV时出现问题。尽管我努力阅读unicode,但我认为我并不完全了解unicode。

from newspaper import Article, Source
import csv

first_article = Article(url="http://www.bloomberg.com/news/articles/2016-09-07/asian-stock-futures-deviate-as-s-p-500-ends-flat-crude-tops-46")

first_article.download()
if first_article.is_downloaded:
    first_article.parse()
    first_article.nlp

article_array = []
collate = {}

collate['title'] = first_article.title
collate['content'] = first_article.text
collate['keywords'] = first_article.keywords
collate['url'] = first_article.url
collate['summary'] = first_article.summary
print(collate['content'])
article_array.append(collate)

keys = article_array[0].keys()
with open('bloombergtest.csv', 'w') as output_file:
    csv_writer = csv.DictWriter(output_file, keys)
    csv_writer.writeheader()
    csv_writer.writerows(article_array)

output_file.close()
Run Code Online (Sandbox Code Playgroud)

当我打印collat​​e ['content'](它是first_article.text)时,控制台会很好地输出文章的内容。一切正确显示,撇号和所有。当我写CVS时,内容单元格文本中包含奇数字符。例如:

“归根结底,欧洲经济状况不佳,通货膨胀看起来并不令人兴奋,并且存在许多政治风险需要考虑。

到目前为止,我已经尝试过:

with open('bloombergtest.csv', 'w', encoding='utf-8') as output_file:
Run Code Online (Sandbox Code Playgroud)

无济于事。我还尝试了utf-16而不是8,但这只是导致单元以奇怪的顺序写入。尽管输出看起来正确,但是它没有在CSV中正确创建单元格。我也尝试过.encode('utf-8')是各种变量,但没有任何效果。

这是怎么回事?当CSV文件包含奇数字符时,为什么控制台会正确打印文本?我怎样才能解决这个问题?

Mar*_*nen 8

添加encoding='utf-8-sig'open(). Excel 需要 UTF-8 编码的 BOM 代码点(字节顺序标记,U+FEFF)签名才能将文件解释为 UTF-8;否则,它采用默认的本地化编码。


sir*_*edy 5

按照Leon和Mark Tolonen的建议,更改with open('bloombergtest.csv', 'w', encoding='utf-8') as output_file:with open('bloombergtest.csv', 'w', encoding='utf-8-sig') as output_file:,工作正常。