Diferencia entre revisiones de «Usuario:Lmorillas/intropyaytozgz/unicode»
De WikiEducator
Línea 1: | Línea 1: | ||
{{MiTitulo|Unicode y encodings}} | {{MiTitulo|Unicode y encodings}} | ||
− | |||
{{Conocimiento previo| | {{Conocimiento previo| | ||
Línea 12: | Línea 11: | ||
can't decode byte 0xc4 in position | can't decode byte 0xc4 in position | ||
10: ordinal not in range(128) | 10: ordinal not in range(128) | ||
+ | |||
+ | <source lang="python"> | ||
+ | >>> f = open('aragon.txt') | ||
+ | >>> aragon_utf8 = f.read() | ||
+ | >>> aragon_utf8 | ||
+ | 'Arag\xc3\xb3n' | ||
+ | >>> len(aragon_utf8) | ||
+ | 7 | ||
+ | >>>type(aragon_utf8) | ||
+ | <type 'str'> | ||
+ | >>> unicode(aragon_utf8) | ||
+ | UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 4: | ||
+ | ordinal not in range(128) | ||
+ | |||
+ | # el problema: | ||
+ | >>> sys.getdefaultencoding() | ||
+ | 'ascii' | ||
+ | |||
+ | >>> aragon_uni = aragon_utf8.decode('utf-8') | ||
+ | >>> aragon_uni | ||
+ | u'Arag\xf3n' | ||
+ | >>> len(aragon_uni) | ||
+ | 6 | ||
}} | }} | ||
+ | {{Objetivo|Title=Conversión y codificación| | ||
+ | |||
+ | <source lang="python"> | ||
+ | s.decode(encoding) | ||
+ | # <type 'str'> to <type 'unicode'> | ||
+ | u.encode(encoding) | ||
+ | # <type 'unicode'> to <type 'str'> | ||
+ | </source> | ||
{{Objetivo|Title=Normalizar cadena| | {{Objetivo|Title=Normalizar cadena| |
Revisión de 08:42 3 dic 2012
Una cadena Unicode es una secuencia de code points, que son números de 0 a 0x10ffff. Esta secuencia se tiene que representar en un conjunto de bytes (valores de 0 a 255) en memoria. Las reglas para traducir una cadena Unicode a una secuencia de bytes se llama encoding.
|
{{Objetivo|Title=El problema|
¿Qué significa esto?
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 10: ordinal not in range(128)
>>> f = open('aragon.txt') >>> aragon_utf8 = f.read() >>> aragon_utf8 'Arag\xc3\xb3n' >>> len(aragon_utf8) 7 >>>type(aragon_utf8) <type 'str'> >>> unicode(aragon_utf8) UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 4: ordinal not in range(128) # el problema: >>> sys.getdefaultencoding() 'ascii' >>> aragon_uni = aragon_utf8.decode('utf-8') >>> aragon_uni u'Arag\xf3n' >>> len(aragon_uni) 6 }} {{Objetivo|Title=Conversión y codificación| <source lang="python"> s.decode(encoding) # <type 'str'> to <type 'unicode'> u.encode(encoding) # <type 'unicode'> to <type 'str'>