Как преобразовать кодировку utf-8 в строку? - PullRequest
0 голосов
/ 02 апреля 2020

Я пытался предварительно обработать текст твита. Текст был в CSV-файле, который был очищен tweepy. Я использую Jupyter Notebook и предположим, что он хранится в переменной 'p', а текст выглядит примерно так, когда я просто выводю его, используя вывод ячейки:

"b" @ sarahbea34343 \\ xf0 \\ x9f \\ x98 \\ x94 Я \\ xe2 \\ x80 \\ x99m не слишком оптимистично c тбч, но эй ... https://twitter.com/icxdsfdf '"

Вместо этого, если я сделаю print (p) в Jupyter, то получится:

"b '@ sarahbea34343 \ xf0 \ x9f \ x98 \ x94 I \ xe2 \ x80 \ x99m не будет в чрезмерно оптимистичном c тбч, но эй ... https://twitter.com/icxdsfdf '"

Я проверил inte rnet, и казалось, что это в байтовом классе utf Кодировка -8. Поэтому я попытался декодировать, используя ".decode ('utf-8')", и он выдал ошибку. Проблема, которую я обнаружил, заключалась в том, что, поскольку она сохранялась в CSV-файле, кодировка utf-8 сохранялась как строка, и, следовательно, весь этот твит был строкой. Это означает, что даже обратная коса sh кодируется в виде строки. Кажется, я не понимаю, как мне преобразовать его так, чтобы я мог удалить эти смайлики и utf-кодировку другого персонажа?

Я пробовал несколько вещей, которые снова приводили к одной и той же строке, например:

p.encode ('ascii', 'ignore'). Decode ('ascii')

или p.encode ('latin-1'). Decode ('utf-8 ') .encode (' ascii ',' ignore ')

1 Ответ

0 голосов
/ 02 апреля 2020

Если текст действительно был сохранен так (вы читаете файл в текстовом режиме 'r'), вы можете сделать это:

# Strip leading b and inner quotes
s = "b'@sarahbea34343 \xf0\x9f\x98\x94 I\xe2\x80\x99m not going in overly optimistic tbh but hey... https://twitter.com/icxdsfdf'"[2:-1]

# Encode as latin-1 to get bytes, decode from unicode-escape to unescape 
# the byte expressions (\\xhh -> \xhh), encode as latin-1 again to get 
# bytes again, then finally decode as UTF-8.

new_s = encode('latin-1').decode('unicode-escape').encode('latin-1').decode('utf-8')
print(new_s)
@sarahbea34343 ? I’m not going in overly optimistic tbh but hey... https://twitter.com/icxdsfdf
...