У меня есть скрипт на python, и недавно я заметил, что я получаю некоторые ошибки кодирования при вводе. Я заметил, что «умные цитаты» вызывают проблемы. Я хотел бы знать совет о том, как преодолеть это. Я использую Python 2
, поэтому необходимо указать моему сценарию, что я хочу кодировать все в UTF-8.
Я думал, что этого было достаточно:
mystring.encode("utf-8")
и в основном это работало, пока я не натолкнулся на умные цитаты (и, возможно, есть много других вещей, которые могут вызвать проблемы, поэтому я и публикую здесь.) Например:
mystring = "hi"
mystring.encode("utf-8")
вывод
'hi'
Но для этого:
mystring2 = "’"
mystring.encode("utf-8")
вывод
UnicodeDecodeError
Traceback (most recent call last)
<ipython-input-21-f563327dcd27> in <module>()
----> 1 mystring.encode("utf-8")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in
position 0: ordinal not in range(128)
Я создал функцию для обработки ввода JSON, который я получаю (иногда я получаю нулевые / None
значения, а иногда числовые значения, хотя в основном это Unicode, поэтому у меня есть пара операторов if):
def xstr(s):
if s is None:
return ''
if isinstance(s, basestring):
return str(s.encode("utf-8"))
else:
return str(s)
Это работало довольно хорошо (до этой проблемы умных цитат)
У меня есть два вопроса:
Почему «умные кавычки» не могут быть закодированы в UTF-8, и есть ли другие ограничения UTF-8 или я полностью неверно истолковываю то, что вижу?
Является ли подход, который я использовал (т. Е. С помощью моей пользовательской функции), лучшим способом справиться с этим? Я попытался использовать попытку / кроме, чтобы поймать случаи умных цитат, но это не сработало.