Как преобразовать строку в utf-8 в Python
У меня есть браузер, который отправляет символы utf-8 на мой сервер Python, но когда я извлекаю его из строки запроса, кодировка, возвращаемая Python, является ASCII. Как преобразовать обычную строку в utf-8?
ПРИМЕЧАНИЕ. Строка, переданная из Интернета, уже кодируется UTF-8, я просто хочу, чтобы Python рассматривал ее как UTF-8, а не ASCII.
Ответы
Ответ 1
>>> plain_string = "Hi!"
>>> unicode_string = u"Hi!"
>>> type(plain_string), type(unicode_string)
(<type 'str'>, <type 'unicode'>)
^ Это различие между строкой байта (plain_string) и строкой unicode.
>>> s = "Hello!"
>>> u = unicode(s, "utf-8")
^ Преобразование в юникод и определение кодировки.
Ответ 2
Если вышеприведенные методы не работают, вы также можете сказать Python игнорировать части строки, которые она не может преобразовать в utf-8:
stringnamehere.decode('utf-8', 'ignore')
Ответ 3
Может быть, это немного излишне, но когда я работаю с ascii и unicode в одних и тех же файлах, повторное декодирование может быть проблемой, вот что я использую:
def make_unicode(input):
if type(input) != unicode:
input = input.decode('utf-8')
return input
Ответ 4
Добавьте следующую строку в верхнюю часть вашего .py файла:
# -*- coding: utf-8 -*-
позволяет кодировать строки непосредственно в script, например:
utfstr = "ボールト"
Ответ 5
Если вы правильно поняли, у вас в коде есть закодированная строка utf-8.
Преобразование байтовой строки в строку юникода называется расшифровкой (кодировка unicode → byte-string).
Вы делаете это с помощью unicode или decode. Или:
unicodestr = unicode(bytestr, encoding)
unicodestr = unicode(bytestr, "utf-8")
Или:
unicodestr = bytestr.decode(encoding)
unicodestr = bytestr.decode("utf-8")
Ответ 6
city = 'Ribeir\xc3\xa3o Preto'
print city.decode('cp1252').encode('utf-8')
Ответ 7
В Python 3.6 у них нет встроенного метода unicode().
По умолчанию строки уже сохранены как Unicode, и преобразование не требуется. Пример:
my_str = "\u221a25"
print(my_str)
>>> √25
Ответ 8
Перевести с помощью ord() и unichar().
Каждый юникод char имеет номер asociated, что-то вроде индекса. Поэтому у Python есть несколько методов для перевода между char и его числом. Нижняя сторона - пример. Надеюсь, это поможет.
>>> C = 'ñ'
>>> U = C.decode('utf8')
>>> U
u'\xf1'
>>> ord(U)
241
>>> unichr(241)
u'\xf1'
>>> print unichr(241).encode('utf8')
ñ