Respuestas:
Tienes razón, ver 3.1.3. Cuerdas Unicode .
Ha sido la sintaxis desde Python 2.0.
Python 3 los hizo redundantes, ya que el tipo de cadena predeterminado es Unicode. Las versiones 3.0 a 3.2 las eliminaron, pero se volvieron a agregar en 3.3+ para compatibilidad con Python 2 para ayudar en la transición de 2 a 3.
ur"string"
. Ej. ) Es válida en Python 2, pero desafortunadamente es una sintaxis no válida en Python 3.
La u en u'Some String'
significa que su cadena es una cadena Unicode .
P: Estoy muy apurado y aterricé aquí desde Google Search. Estoy tratando de escribir estos datos en un archivo, obtengo un error y necesito la solución más simple, probablemente defectuosa, en este momento.
R: Realmente deberías leer el ensayo Absoluto Mínimo de Joel que todo desarrollador de software debe saber absolutamente, positivamente sobre el ensayo Unicode y los conjuntos de caracteres (¡Sin excusas!) Sobre conjuntos de caracteres.
Q: sry sin código de tiempo por favor
Una multa. intente str('Some String')
o 'Some String'.encode('ascii', 'ignore')
. Pero realmente debería leer algunas de las respuestas y la discusión sobre la conversión de una cadena Unicode y este excelente, excelente, manual sobre codificación de caracteres.
Mi conjetura es que indica "Unicode", ¿es correcto?
Si.
Si es así, ¿desde cuándo está disponible?
Python 2.x.
En Python 3.x las cadenas usan Unicode por defecto y no hay necesidad del u
prefijo. Nota: en Python 3.0-3.2, la u es un error de sintaxis. En Python 3.3+ es legal nuevamente para que sea más fácil escribir aplicaciones compatibles con 2/3.
u
prefijo.
six.text_type()
todas partes para el número (con suerte minúsculo) de personas que todavía usan 3. [012] - Al menos la información está ahí para que pueda elegir.
Vine aquí porque tenía el síndrome del charco gracioso en mi requests
salida. Pensé response.text
que me daría una cadena decodificada correctamente, pero en la salida encontré divertidos caracteres dobles donde deberían haber sido las diéresis alemanas.
Resulta que de response.encoding
alguna manera estaba vacío, por response
lo que no sabía cómo decodificar correctamente el contenido y simplemente lo trató como ASCII (supongo).
Mi solución fue obtener los bytes sin formato con 'response.content' y aplicarlos manualmente decode('utf_8')
. El resultado fue schöne Umlaute.
El decodificado correctamente
pelaje
contra los decodificados incorrectamente
fĂźr
Todas las cadenas destinadas a humanos deberían usar u "".
Descubrí que la siguiente mentalidad ayuda mucho cuando se trata de cadenas de Python: Todas las cadenas de manifiesto de Python deben usar la u""
sintaxis. La ""
sintaxis es solo para conjuntos de bytes.
Antes de que comience el ataque, déjame explicarte. La mayoría de los programas de Python comienzan con el uso ""
de cadenas. Pero luego deben admitir la documentación fuera de Internet, por lo que comienzan a usar "".decode
y, de repente, reciben excepciones en todas partes sobre la decodificación de esto y aquello, todo por el uso de ""
cadenas. En este caso, Unicode actúa como un virus y causará estragos.
Pero, si sigue mi regla, no tendrá esta infección (porque ya estará infectado).
bash -c "echo Shouldn\\'t you use b\\\"...\\\" for byte arrays?"
u""
.
Es unicode.
Simplemente ponga la variable entre str()
, y funcionará bien.
Pero en caso de que tenga dos listas como las siguientes:
a = ['co32','co36']
b = [u'co32',u'co36']
Si marca set(a)==set(b)
, será falso, pero si hace lo siguiente:
b = str(b)
set(a)==set(b)
Ahora, el resultado será verdadero.
str()
o u'€'.encode()
) sin pasar una codificación. Si la cadena contiene no ASCII, el usuario recibirá una excepción UnicodeEncodeException.
b = str(b)
solo da la cadena repr()
de la lista, es decir b = "[u'co32', u'co36']"
. Entoncesset(a)==set(b) = False