Diferencia entre revisiones de «Usuario:Lmorillas/intropyaytozgz/unicode»

De WikiEducator
Saltar a: navegación, buscar
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 07:42 3 dic 2012



Icon preknowledge.gif

Conocimiento previo

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'>


Icon objectives.jpg

Normalizar cadena

import unicodedata
 
def textoplano(s):
 
    def normalize(c):
        return unicodedata.normalize("NFD", c)[0]  # NFD: Normal Form Decomposition 
 
    return ''.join(normalize(c) for c in s)
 
>>> textoplano('una cigüeña hábil')
"una ciguena habil"