使用python创建CSV文件时,阿拉伯语文本被转义序列替换

时间:2017-12-03 17:09:02

标签: python-3.x

我正在尝试创建一个CSV文件,其中包含使用tweepy为我正在进行的项目收集的阿拉伯语推文。一切都很好收集数据,但是,当我写入CSV文件时,所有阿拉伯语结果都使用\ xXXXX序列进行转义 如下:

  

B'#\ XD8 \ XA7 \ xd9 \ X84 \ xd9 \ x8a \ xd9 \ X88 \ xd9 \ x85_ \ XD8 \ XA7 \ xd9 \ X84 \ XD8 \ xb9 \ XD8 \ XA7 \ xd9 \ X84 \ xd9 \ X85 \ xd9 \ x8a_ \ xd9 \ x84 \ xd8 \ x84 \ xd8 \ xa7 \ xd8 \ xb9 \ xd8 \ xa7 \ xd9 \ x82 \ xd9 \ x87_2017 \ xd8 \ xa7 \ xd9 \ x84 \ xd8 \ xa5 \ xd8 \ xb9 \ xd8 \ xa7 \ xd9 \ x82 \ xd8 \ xa9 \ xd8 \ xa7 \ xd9 \ x84 \ xd8 \ xad \ xd9 \ x82 \ xd9 \ x8a \ xd9 \ x82 \ xd9 \ x8a \ xd8 \ xa9 \ xd8 \ xa7 \ xd8 \ xb9 \ xd8 \ xa7 \ xd9 \ x82 \ xd8 \ xa9 \ xd8 \ xa7 \ xd9 \ x84 \ xd9 \ x81 \ xd9 \ x83 \ xd8 \ xb1 \ xd9 \ x88 \ xd9 \ x84 \ xd9 \ x8a \ xd8 \ xb3 \ xd8 \ xaa \ xd8 \ xa7 \ xd8 \ xb9 \ xd8 \ xa7 \ xd9 \ x82 \ xd8 \ xa9

我查看了许多以前提出的问题,我能找到的只是python 2的建议或类似于我正在编写的答案。当我创建JSON文件时,我正在使用ensure_ascii=False,但我找不到任何类似的CSV。以下是我的代码:

 with codecs.open('tweets.csv', 'a', encoding='utf-8') as file:
        fieldnames = ['tweet', 'country']
        writer = csv.DictWriter(file, fieldnames=fieldnames)
        data = {'tweet': status.text, 'country': status.place.full_name}
        writer.writerow(data)

我尝试将.encoding='utf-8'添加到status.textstatus.place,但这也无效。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

在编写之前,必须确保将拥有的阿拉伯字符串解码为UTF-8。假设status.text的类型为bytes,则应键入text=status.text.decode('utf-8')。 (也许您也必须为status.place.full_name执行此操作。)但是,如果它的类型为str,则它将没有decode()方法。为了避免文件中的转义序列,无论如何都应写入str对象。

如果您尝试将bytes对象(例如您可能拥有的对象)的编码指定为'utf-8',则该编码将无法工作,因为文本已经以UTF-8 个字节为单位。因此,为了获取UTF-8 字符,您必须在decode()对象上调用bytes。这样,它将写入UTF-8字符,而不是UTF-8字节。