Я пытаюсь сохранить urdu в csv файле, но символы хранятся в файле, а не urdu text, и я попытался добавить 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"
, но оба они не работают. Нужна помощь в этом.
Набор символов ISO-8859-1 (также называемый Latin-1) включает только 256 символов, в основном из Западной Европы. В результате он не может представлять символы, которые вы хотите сохранить.
UTF-8 с другой стороны может хранить практически все, что вы можете придумать (а затем и некоторые), поддерживающие все символы юникода. Если вы сомневаетесь, это кодировка.
Следующий код демонстрирует сохранение и загрузку 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, заставляя его выглядеть так, как будто все работает.