En los principios de la informática los ordenadores se diseñaron para utilizar sólo caracteres ingleses, por lo tanto se creó una codificación de caracteres, llamada ascii (American Standard Code for Information Interchange) que utiliza 7 bits para codificar los 128 caracteres necesarios en el alfabeto inglés. Posteriormente se extendió esta codificación para incluir caracteres no ingleses. Al utilizar 8 bits se pueden representar 256 caracteres. De esta forma para codificar el alfabeto latino aparece la codificación ISO-8859-1 o Latín 1.
La codificación unicode nos permite representar todos los caracteres de todos los alfabetos del mundo, en realidad permite representar más de un millón de caracteres, ya que utiliza 32 bits para su representación, pero en la realidad sólo se definen unos 110.000 caracteres.
UTF-8 es un sistema de codificación de longitud variable para Unicode. Esto significa que los caracteres pueden utilizar diferente número de bytes.
En Python 3.x las cadenas de caracteres pueden ser de tres tipos: Unicode, Byte y Bytearray.
- El tipo
unicode
permite caracteres de múltiples lenguajes y cada carácter en una cadena tendrá un valor inmutable. - El tipo
byte
sólo permitirá caracteres ASCII y los caracteres son también inmutables. - El tipo
bytearray
es como el tipobyte
pero, en este caso, los caracteres de una cadena si son mutables.
Algo que debe entenderse (e insiste Mark Pilgrim en su libro Dive into Python) es que "los bytes no son caracteres, los bytes son bytes; un carácter es en realidad una abstracción; y una cadena de caracteres es una sucesión de abstracciones".
-
chr(i)
: Nos devuelve el carácter Unicode que representa el códigoi
.>>> chr(97) 'a' >>> chr(1004) 'Ϭ'
-
ord(c)
: recibe un carácterc
y devuelve el código unicode correspondiente.>>> ord("a") 97 >>> ord("Ϭ") 1004