如何在CSV文件中保存乌尔都语字符?

时间:2018-09-24 16:47:04

标签: python

我正在尝试将urdu保存在csv文件中,但符号存储在文件中,而不是urdu文本中,我也尝试添加iso代码进行urdu编码,但无法正常工作ISO-8859-1

import sys
import json
import time
import csv
import codecs

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
tweets = api.search(q="اردو"+" -filter:retweets",count="10000")
for tweet in tweets:
  if tweet.lang == "ur":
    #print(tweet.text)
    with open('mytweets18.csv', 'w', encoding='ISO-8859-1') as f:
     writer = csv.writer(f, delimiter=';')
     writer.writerow(tweet.text)

问题出在编码上。我也尝试过使用encoding="utf-8",但两者均无法正常工作。在这方面需要帮助。

1 个答案:

答案 0 :(得分:0)

ISO-8859-1字符集(也称为Latin-1)仅包含256个字符,大部分来自西欧。因此,它无法代表您要保存的字符。

另一方面,

UTF-8可以存储几乎所有您认为(然后有些)支持所有unicode字符的内容。如有疑问,请使用此编码。

以下代码演示了如何使用示例中的文本保存和加载CSV文件:

import csv

data = u"ردو"


with(open('example.csv', 'w', encoding='utf-8')) as fh:
    writer = csv.writer(fh)
    writer.writerow([data])

with(open('example.csv', encoding='utf-8')) as fh:
    for row in csv.reader(fh):
        print(row[0], len(row[0]))   
        # 3 ردو  (it seems backwards but Urdu is right-to-left)

您可以看到正确保留了字符数。这很重要,因为UTF-8将字符存储为多个字节。例如,如果将它们加载为“ iso-8859-1”,则会出现乱码,如:

# رد٠6

这可能具有欺骗性,因为您的终端可以通过将字节重新解释为UTF-8来掩盖您的不同之处,从而使一切看起来都可以正常工作。