Cómo convertir una cadena de caracteres a utf-8 en Python

Tengo un navegador que envía los caracteres utf-8 para mi Python server, pero cuando me recupere de la cadena de consulta, la codificación que Python devuelve es el ASCII. ¿Cómo puedo convertir la cadena sin formato utf-8?

NOTA: La cadena que se pasa desde la web ya está codificado en UTF-8, sólo quiero hacer Python para tratarlo como UTF-8 no ASCII.

  • Prueba este enlace http://evanjones.ca/python-utf8.html
  • Creo que un mejor título sería Cómo obligar a una cadena unicode sin traducción?
  • En 2018, python 3 si usted consigue ascii error de descodificación de hacer "some_string".encode('utf-8').decode('utf-8')
InformationsquelleAutor Bin Chen | 2010-11-15

8 Kommentare

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

    ^ Esta es la diferencia entre una cadena de bytes (plain_string) y una cadena unicode.

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

    ^ Conversión a unicode y la especificación de la codificación.

    • Estoy obteniendo el siguiente error: UnicodeDecodeError: 'utf8' codec can't decode byte 0xb0 in position 2: invalid start byte Este es mi código: ret=[] para la línea en csvReader: cline=[] para elm en línea: unicodestr = unicode(del olmo, ‘utf-8’) cline.append(unicodestr) ret.append(cline)
    • Nada de esto se aplica en Python 3, todas las cadenas unicode y unicode() no existe.
    • Tipo de golpes de esto, pero gracias. Esto se ha corregido un problema donde yo estaba tratando de imprimir unicode y estaba recibiendo �s.
    • Cómo convertir u de nuevo a un str (formato de convertir u de vuelta a s)?
    • u’abcd’.encode(‘utf-8’)
    • Este código sólo funcionará mientras el texto no contiene caracteres no ascii; un simple carácter acentuado en la cadena hacerla fracasar.

  2. 67

    Si los métodos anteriores no funcionan, también puede decirle a Python ignorar partes de una cadena que no se puede convertir a utf-8:

    stringnamehere.decode('utf-8', 'ignore')
    • Tengo AttributeError: ‘str’ object no tiene ningún atributo ‘decode’
    • suena como que usted está usando Python 3, en cuyo caso Python debe manejar los problemas de codificación para usted. Has probado a leer el documento, sin necesidad de especificar una codificación?
  3. 20

    Podría ser un poco exagerado, pero cuando trabajo con ascii y unicode en los mismos archivos, repitiendo decodificar puede ser un dolor, esto es lo que yo uso:

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

    Agregar la siguiente línea a la parte superior de su .py archivo:

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

    permite codificar cadenas directamente en tu script como este:

    utfstr = "ボールト"
    • No es lo OP pide. Pero evitar tales literales de cadena de todos modos. Crea cadena Unicode en Python 3 (buena) pero es un bytestring en Python 2 (malo). Agregar from __future__ import unicode_literals en la parte superior o uso u'' prefijo. No utilizar caracteres no ascii en bytes literales. Para obtener bytes utf-8, que podría utf8bytes = unicode_text.encode('utf-8') más adelante si es necesario.
    • cómo se from __future__ import unicode_literals me ayudan a convertir una cadena con caracteres no ascii, utf-8?
    • No voy a responder a la pregunta. Mira, es un comentario, no una respuesta. Mi comentario se aborda el problema con el código de la respuesta. Se intenta crear un bytestring con caracteres no-ascii en Python 2 (es un SyntaxError en Python 3 bytes literales a prohibir que).
  5. 13

    Si lo entiendo correctamente, usted tiene una codificación utf-8 bytes de la cadena en el código.

    La conversión de un byte de la cadena en una cadena unicode que se conoce como la decodificación (unicode -> byte-cadena de codificación).

    Hacerlo mediante el uso de la unicode función o la decodificar método. O bien:

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

    O:

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

    En Python 3.6, que no tiene un built-en unicode() método.
    Las cadenas ya están almacenados como unicode de forma predeterminada y no es necesaria la conversión. Ejemplo:

    my_str = "\u221a25"
    print(my_str)
    >>> 25
  7. 3

    Traducir con ord() y unichar().
    Cada unicode char tiene un número asociado, algo así como un índice. Así que Python tiene un par de métodos para traducir entre un char y su número. La desventaja es una ñ ejemplo. La esperanza puede ayudar.

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

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea