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


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

Примечание: строка, переданная из интернета, уже закодирована UTF-8, я просто хочу, чтобы Python рассматривал ее как UTF-8, а не ASCII.

8 141

8 ответов:

>>> plain_string = "Hi!"
>>> unicode_string = u"Hi!"
>>> type(plain_string), type(unicode_string)
(<type 'str'>, <type 'unicode'>)

^ это разница между строкой байта (plain_string) и строкой Юникода.

>>> s = "Hello!"
>>> u = unicode(s, "utf-8")

^ преобразование в Юникод и указание кодировки.

Если методы выше не работают, вы также можете сказать Python игнорировать части строки, которые он не может преобразовать в utf-8:

stringnamehere.decode('utf-8', 'ignore')

может быть немного перебор, но когда я работаю с ascii и unicode в тех же файлах, повторение декодирования может быть болью, это то, что я использую:

def make_unicode(input):
    if type(input) != unicode:
        input =  input.decode('utf-8')
        return input
    else:
        return input

Если я правильно вас понял, у вас есть кодированная байтовая строка utf-8 в вашем коде.

преобразование байтовой строки в строку Юникода называется декодированием (unicode -> Byte-string is encoding).

Вы делаете это с помощью unicode или расшифруйте метод. Либо:

unicodestr = unicode(bytestr, encoding)
unicodestr = unicode(bytestr, "utf-8")

или:

unicodestr = bytestr.decode(encoding)
unicodestr = bytestr.decode("utf-8")

добавление следующей строки в верхнюю часть файла. py:

# -*- coding: utf-8 -*-

позволяет кодировать строки непосредственно в скрипте, например:

utfstr = "ボールト"
city = 'Ribeir\xc3\xa3o Preto'
print city.decode('cp1252').encode('utf-8')

в Python 3.6 они не имеют встроенной функции unicode (). Чтобы преобразовать строку в unicode, просто получите значение unicode символа и сделайте следующее:

my_str = "\u221a25"
my_str = u"{}".format(my_str)
print(my_str)
>>> √25

перевести с помощью ord () и unichar (). Каждый символ Юникода имеет ассоциированное число, что-то вроде индекса. Таким образом, у Python есть несколько методов для перевода между символом и его номером. Недостатком является - пример. Надеюсь, это поможет.

>>> C = 'ñ'
>>> U = C.decode('utf8')
>>> U
u'\xf1'
>>> ord(U)
241
>>> unichr(241)
u'\xf1'
>>> print unichr(241).encode('utf8')
ñ