Вопрос

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

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

Это было полезно?

Решение

>>> 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")

^ Преобразование в Unicode и указание кодирования.

Другие советы

Если приведенные выше методы не работают, вы также можете сказать 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

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

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

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

utfstr = "ボールト"

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

Преобразование байтовой строки в строку Unicode известно как декодирование (кодирование Unicode-> Byte String).

Вы делаете это, используя Unicode функция или декодировать метод Либо:

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

Или же:

unicodestr = bytestr.decode(encoding)
unicodestr = bytestr.decode("utf-8")
city = 'Ribeir\xc3\xa3o Preto'
print city.decode('cp1252').encode('utf-8')

В Python 3.6 они не имеют встроенного метода Unicode (). Строки уже хранятся как Unicode по умолчанию, и преобразование не требуется. Пример:

my_str = "\u221a25"
print(my_str)
>>> √25

Перевести с помощью ord () и unichar (). У каждого чара Unicode есть номер, что -то вроде индекса. Таким образом, у Python есть несколько методов для перевода между Чар и его номером. Недостатком является пример. Надеюсь, это может помочь.

>>> C = 'ñ'
>>> U = C.decode('utf8')
>>> U
u'\xf1'
>>> ord(U)
241
>>> unichr(241)
u'\xf1'
>>> print unichr(241).encode('utf8')
ñ
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top