我正在使用python的twitter流媒体包。我目前正在使用以unicode编写的关键字来搜索包含该字词的推文。然后我使用python创建推文的数据库csv文件。但是,当我将它们保存在csv中时,我想将推文转换回阿拉伯符号。
我收到的错误都类似于“错误ondata位置___中的ASCII字符不在128范围内。”
这是我的代码:
class listener(StreamListener):
def on_data(self, data):
try:
#print data
tweet = (str((data.split(',"text":"')[1].split('","source')[0]))).encode('utf-8')
now = datetime.now()
tweetsymbols = tweet.encode('utf-8')
print tweetsymbols
saveThis = str(now) + ':::' + tweetsymbols.decode('utf-8')
saveFile = open('rawtwitterdata.csv','a')
saveFile.write(saveThis)
saveFile.write('\n')
saveFile.close()
return True
答案 0 :(得分:1)
Excel需要将Unicode BOM字符写入UTF-8文件的开头才能正确查看。没有它,Excel假设" ANSI"编码,这是与操作系统区域相关的。
这会写一个带有阿拉伯语的3行3列CSV文件:
#!python2
#coding:utf8
import io
with io.open('arabic.csv','w',encoding='utf-8-sig') as f:
s = u'إعلان يونيو وبالرغم تم. المتحدة'
s = u','.join([s,s,s]) + u'\n'
f.write(s)
f.write(s)
f.write(s)
输出:
对于您的具体示例,只需确保将BOM字符u'\xfeff'
写为文件的第一个字符,以UTF-8编码。在上面的例子中,' utf-8-sig'编解码器确保编写BOM。
另请参阅this answer,其中显示了如何包装csv
模块以支持Unicode,或获取第三方unicodecsv
模块。
答案 1 :(得分:0)
这是在文本中写阿拉伯语的片段
# coding=utf-8
import codecs
from datetime import datetime
class listener(object):
def on_data(self, tweetsymbols):
# python2
# tweetsymbols is str
# tweet = (str((data.split(',"text":"')[1].split('","source')[0]))).encode('utf-8')
now = datetime.now()
# work with unicode
saveThis = unicode(now) + ':::' + tweetsymbols.decode('utf-8')
try:
saveFile = codecs.open('rawtwitterdata.csv', 'a', encoding="utf8")
saveFile.write(saveThis)
saveFile.write('\n')
finally:
saveFile.close()
return self
listener().on_data("إعلان يونيو وبالرغم تم. المتحدة")
您必须了解编码https://pythonhosted.org/kitchen/unicode-frustrations.html