it-swarm.dev

Como converter uma string para utf-8 em Python

Eu tenho um navegador que envia caracteres utf-8 para o meu servidor Python, mas quando eu o recupero da string de consulta, a codificação que o Python retorna é ASCII. Como posso converter a string simples para utf-8?

NOTA: A string passada da web já está codificada em UTF-8, eu só quero fazer o Python tratá-la como UTF-8 e não como ASCII.

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

^ Essa é a diferença entre uma string de bytes (plain_string) e uma string unicode.

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

^ Convertendo para unicode e especificando a codificação.

238
user225312

Se os métodos acima não funcionarem, você também pode dizer ao Python para ignorar partes de uma string que ele não pode converter para utf-8:

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

Pode ser um pouco exagerado, mas quando eu trabalho com ascii e unicode nos mesmos arquivos, decodificação repetida pode ser uma dor, é isso que eu uso:

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

Adicionando a seguinte linha ao topo do seu arquivo .py:

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

permite que você codifique strings diretamente no seu script, assim:

utfstr = "ボールト"
13
Ken

Se eu entendi corretamente, você tem uma string de byte codificada utf-8 em seu código.

A conversão de uma cadeia de bytes para uma cadeia unicode é conhecida como decodificação (unicode -> byte-string está codificando).

Você faz isso usando a função nicode ou o método decode . Ou:

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

Ou:

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

No Python 3.6, eles não possuem um método unicode () integrado. As cadeias de caracteres já são armazenadas como unicode por padrão e nenhuma conversão é necessária. Exemplo:

my_str = "\u221a25"
print(my_str)
>>> √25
6
Zld Productions

Traduza com ord () e unichar (). Cada caractere unicode tem um número associado, algo como um índice. Então Python tem alguns métodos para traduzir entre um char e seu número. Downside é um exemplo. Espero que possa ajudar.

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