Как преобразовать строку в UTF-8 в Python - PullRequest
172 голосов
/ 15 ноября 2010

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

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

Ответы [ 8 ]

239 голосов
/ 15 ноября 2010
>>> 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")

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

65 голосов
/ 07 октября 2013

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

stringnamehere.decode('utf-8', 'ignore')
19 голосов
/ 29 ноября 2014

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

def make_unicode(input):
    if type(input) != unicode:
        input =  input.decode('utf-8')
        return input
    else:
        return input
14 голосов
/ 22 мая 2014

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

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

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

utfstr = "ボールト"
13 голосов
/ 15 ноября 2010

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

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

Это можно сделать с помощью функции unicode или метода decode . Или:

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

Или:

unicodestr = bytestr.decode(encoding)
unicodestr = bytestr.decode("utf-8")
8 голосов
/ 26 июля 2017
city = 'Ribeir\xc3\xa3o Preto'
print city.decode('cp1252').encode('utf-8')
6 голосов
/ 20 апреля 2017

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

my_str = "\u221a25"
print(my_str)
>>> √25
3 голосов
/ 09 ноября 2017

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

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