Как сохранить символы языка урду в файле CSV?

1

Я пытаюсь сохранить 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", но оба они не работают. Нужна помощь в этом.

  • 1
    Как вы проверяете содержимое файла? Вы читаете его обратно в Python или открываете его во внешнем текстовом редакторе?
  • 1
    Пожалуйста, опишите подробно, как это "не работает".
Показать ещё 2 комментария
Теги:

1 ответ

0

Набор символов 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, заставляя его выглядеть так, как будто все работает.

  • 0
    не могли бы вы помочь с моим вопросом, я буду вам благодарен
  • 0
    Сожалею. Я пытался быть. В своем вопросе вы говорите «это не работает», но мой фрагмент выше показывает сохранение и загрузку символов правильно. Можете ли вы дать более подробную информацию? Можете ли вы дать ошибку, если вы ее видите?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню