没有BOM的 UTF-8和UTF-8有什么不同?哪个更好?
我正在尝试使用填充了信息的文本文件来对Python 3程序进行一些操作.但是,在尝试读取文件时,我收到以下错误:
回溯(最近一次调用最后一次):文件"SCRIPT LOCATION",第NUMBER行,在text = file.read()文件"C:\ Python31\lib\encodings\cp1252.py",第23行,在解码中返回codecs.charmap_decode (input,self.errors,decoding_table)[0] UnicodeDecodeError:'charmap'编解码器无法解码2907500位的字节0x90:字符映射到
如果有人能给我任何帮助试图解决这个问题,我将非常感激.
我想确保我的代码中的所有字符串都是unicode,所以我使用unicode_literals,然后我需要将字符串写入文件:
from __future__ import unicode_literals
with open('/tmp/test', 'wb') as f:
f.write("??") # UnicodeEncodeError
Run Code Online (Sandbox Code Playgroud)
所以我需要这样做:
from __future__ import unicode_literals
with open('/tmp/test', 'wb') as f:
f.write("??".encode("utf-8"))
f.write("??".encode("utf-8"))
f.write("??".encode("utf-8"))
f.write("??".encode("utf-8"))
Run Code Online (Sandbox Code Playgroud)
但每次我需要在代码中编码时,我都很懒,所以我改为编解码器:
from __future__ import unicode_literals
from codecs import open
import locale, codecs
lang, encoding = locale.getdefaultlocale()
with open('/tmp/test', 'wb', encoding) as f:
f.write("??")
Run Code Online (Sandbox Code Playgroud)
如果我只想写文件,任何更简单的方法,我还是认为这太过分了?
我正在尝试使用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)
当我打印collate ['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文件包含奇数字符时,为什么控制台会正确打印文本?我怎样才能解决这个问题?
可能重复:
在python中写入utf-8文件
我有Unicode字符串(带日文字符)我想写入CSV文件.但是,BOM似乎没有正确写入,就像""第一行中的字符串一样.这导致Excel无法正确显示日文字符.使用Notepad ++打开CSV时,字符会正确显示.
fileObj = codecs.open(filename,"w",'utf-8')
fileObj.write(codecs.BOM_UTF8)
c = u';'
for s in stringsToWrite:
line = e.someUnicodeString
fileObj.write(line)
fileObj.close()
Run Code Online (Sandbox Code Playgroud)