Contamos con la mejor información que descubrimos online. Queremos que te resulte de utilidad y si quieres aportar algo que nos pueda ayudar a perfeccionar nuestra información hazlo con libertad.
Solución:
En Python 3, todas las cadenas son secuencias de caracteres Unicode. Hay un bytes
tipo que contiene bytes sin formato.
En Python 2, un string puede ser de tipo str
o de tipo unicode
. Puedes saber qué usando un código como este:
def whatisthis(s):
if isinstance(s, str):
print "ordinary string"
elif isinstance(s, unicode):
print "unicode string"
else:
print "not a string"
Esto no distingue “Unicode o ASCII”; solo distingue los tipos de Python. un Unicode string puede consistir únicamente en caracteres en el rango ASCII, y una cadena de bytes puede contener ASCII, Unicode codificado o incluso datos no textuales.
Cómo saber si un objeto es un Unicode string o un byte string
Puedes usar type
o isinstance
.
En Python 2:
>>> type(u'abc') # Python 2 unicode string literal
>>> type('abc') # Python 2 byte string literal
En Python 2, str
es solo una secuencia de bytes. Python no sabe cuál es su codificación. los unicode
type es la forma más segura de almacenar texto. Si quiere entender esto más, le recomiendo http://farmdev.com/talks/unicode/.
En Python 3:
>>> type('abc') # Python 3 unicode string literal
>>> type(b'abc') # Python 3 byte string literal
En Python 3, str
es como Python 2 unicode
, y se utiliza para almacenar texto. como se llamaba str
en Python 2 se llama bytes
en Phyton 3.
Cómo saber si un byte string es valido utf-8 o ascii
Puedes llamar decode
. Si genera una excepción UnicodeDecodeError, no era válida.
>>> u_umlaut = b'xc3x9c' # UTF-8 representation of the letter 'Ü'
>>> u_umlaut.decode('utf-8')
u'xdc'
>>> u_umlaut.decode('ascii')
Traceback (most recent call last):
File "", line 1, in
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
En python 3.x, todas las cadenas son secuencias de caracteres Unicode. y haciendo la verificación isinstance para str (lo que significa unicode string por defecto) debería ser suficiente.
isinstance(x, str)
Con respecto a python 2.x, la mayoría de las personas parecen estar usando una declaración if que tiene dos comprobaciones. uno para str y otro para unicode.
Si quieres comprobar si tienes un ‘string-like ‘objeto todo con una declaración sin embargo, puede hacer lo siguiente:
isinstance(x, basestring)
Nos puedes estimular nuestra investigación dejando un comentario o dejando una valoración te damos la bienvenida.