Подтвердить что ты не робот

Как преобразовать строку в utf-8 в Python

У меня есть браузер, который отправляет символы utf-8 на мой сервер Python, но когда я извлекаю его из строки запроса, кодировка, возвращаемая Python, является ASCII. Как преобразовать обычную строку в utf-8?

ПРИМЕЧАНИЕ. Строка, переданная из Интернета, уже кодируется UTF-8, я просто хочу, чтобы Python рассматривал ее как UTF-8, а не ASCII.

4b9b3361

Ответ 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')
ñ