SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Entendiendo


Unicode


Facundo Batista
facundo@taniquetil.com.ar
http://www.taniquetil.com.ar
¿Qué es Unicode?
Un estándar

¿Pero en qué consiste?
Un repertorio de más de 100 mil caracteres
Planillas de códigos para referencia visual
Metodologías de codificación
Codificaciones estándares
Enumeración de propiedades de los caracteres
Etc...



                                               2
¿Pero esto cómo
    se come?



                  3
Masticando un Code Chart
Una planilla de códigos es una tabla con el
dibujo de cada caracter

El mapa completo de caracteres de Unicode
está divido en varios codecharts

Por ejemplo:
Basic Latin
Latin-1
Greek
Runic
                                              4
Un estándar con carácter
Por cada caracter tenemos:
Un glifo (de referencia, no prescriptivo)
Un nombre
Un número
Más info

Ejemplo:
03C0
GREEK SMALL LETTER PI
math constant 3.141592...

                                            5
¿Y en Python?
Definimos el caracter según su código
     >>> pi = u"u03c0"
     >>> len(pi)
     1

¿Y cómo se ve?
     >>> print pi
     π
     >>> pi
     u'u03c0'
     >>> pi == u"π"
     True

                                        6
Bititos
Unicode es muy lindo... ¿pero como lo
persistimos o transmitimos?

Tenemos que traducir los caracteres
Unicode a bits.

Codificar o Encode
Pasar de un caracter Unicode
           a una secuencia de bytes

Decodificar o Decode
Pasar de una secuencia de bytes
           a un caracter Unicode        7
Vamos de nuevo




                 8
¿No es directo?
Necesitamos codificar la información de una
forma estándar

No es exclusivo de Unicode, nos pasa con
los números también

Ejemplo: Números
Negativos: Complemento a 1 o a 2
       -3 puede ser (bin) 1100 o 1101
Punto flotante: Precisión simple y cuádruple
       1.0 puede ser (hex) 3F80 0000 o
               3FFF 0000 0000 0000 0000 0000 0000 0000
                                                         9
Codificando Unicode
¿Cómo representamos en bits un caracter
Unicode?
Tenemos que inventar un código
Definir cuantos bits usará
Definir las reglas de conversión

Ya tenemos muchos códigos estándares
ASCII
Latin-1 (ISO-8859-1)
UTF-8, -16, -32
etc
                                          10
Distintas formas de lo mismo
Distintos encodings, distintos bytes:
      >>> enie = u"ñ"
      >>> enie.encode("latin1")
      'xf1'
      >>> enie.encode("utf8")
      'xc3xb1'
      >>> enie.encode("utf16")
      'xffxfexf1x00'


¿Pero cómo hacemos la decodificación?
Necesitamos sí o sí saber el código usado
                                            11
¿Pero cuál uso? Latin1
Está muy extendido
No se mantiene desde 2004
No representa todos los caracteres:
      >>> print pi
      π
      >>> pi.encode("latin1")
      ...
      UnicodeEncodeError: 'latin-1' codec can't
        encode character u'u03c0'...

Se utiliza un byte
Primeros 128 caracteres: ASCII
Segundos 128: para lenguajes de Europa occidental
                                                    12
¿Pero cuál uso? UTF-16
Soporta todos los caracteres
Pero tenemos que perder dos bytes por caracter (más el
BOM!)
Incluso si utilizamos caracteres simples, como en esta
linea.
       >>> u"esta".encode("utf16")
       'xffxfeex00sx00tx00ax00'
       >>> # FFFE 6500 7300 7400 6100

Utiliza desde 2 bytes
Usa dos bytes para el BMP, pero puede usar 4 bytes
Se justifica si siempre tengo caracteres raros
No es UCS-2 (el cual usa 2 bytes fijos)                  13
¿Pero cuál uso? UTF-8
Es el estándar en Linux
Soporta todo el espacio Unicode
Utiliza uno, dos, tres y cuatro bytes, según necesite
       >>> u"k".encode("utf8")
       'k'
       >>> u"ñ".encode("utf8")
       'xc3xb1'
       >>> u" 쏔 ".encode("utf8")
       'xecx8fx94'

Nunca se desactualizaría

                                                        14
uteefe-ocho
8 bits para los 128 caracteres ASCII
       0-7F:     0zzzzzzz

16 bits para letras latinas y de otros idiomas
       80-7FF:   110yyyyy 10zzzzzz

24 bits para el resto del BMP
       800-D7FF y E000-FFFF:       1110xxxx 10yyyyyy 10zzzzzz

32 bits para el resto de Unicode
       10000–10FFFF:   11110www 10xxxxxx 10yyyyyy 10zzzzzz


                                                                15
Encoding & Decoding
       >>> pi
       u'u03c0'

       >>> d = pi.encode("utf8")
       >>> d
       'xcfx80'

       >>> d.decode("utf8")
       u'u03c0'

Python guarda las cadenas Unicode como bits
Usa una codificación interna en particular
Se decide al compilar Python: UCS-2 o UCS-4

                                              16
Y dale...
¡Hasta que lo sepan de memoria!




                                  17
Reglas de oro
Internamente siempre utilizar Unicode
      >>> dato = 'mxc3xa1scara' # máscara en UTF8
      >>> len(dato)
      8
      >>> print dato[:4]
      más
      >>> print dato.upper()
      MáSCARA


Codificar y decodificar en los bordes
encode/decode
codecs.open()                                         18
Siempre en los bordes
>>> nomapell = MiBDDWrapper(foo, bar)   1. Leemos de una
>>> nomapell
'xc5mal xd6fwerman'                      fuente externa


       >>> completo = nomapell.decode("latin1")
       >>> completo
                                                        3. Procesamos
       u'xc5mal xd6fwerman'                            internamente
       >>> print completo
                                >>> n, a = completo.split()
       Åmal Öfwerman
                                >>> tit = "%s, %s" % (a, n)
                                >>> print tit
                                Öfwerman, Åmal
     2. Pasamos a
     Unicode (decode)
                                        >>> titok = tit.encode("utf8")
              4. Pasamos a bytes        >>> titok
                                        'xc3x96fwerman, xc3x85mal'
                       (encode)
Ejemplo!
                         5. Dejamos el resultado       >>> alHTML(titok)
                                                                           19
Código fuente Unicode
Caracteres Unicode en nuestro código

El editor también debe traducir a bytes
  ¡Lo codifica!

El intérprete de Python debe saber leerlo
  ¡Lo decodifica!

Tiene que saber qué encoding se usó
  #-*- coding: X -*-


                                            20
Cosas piolas
>>> unicodedata.name(pi)
'GREEK SMALL LETTER PI'
>>> print unicodedata.lookup("GREEK SMALL LETTER THETA")
θ
>>> print u"caño de desagüe".upper()
CAÑO DE DESAGÜE
>>> print pi, pi.upper()
πΠ
>>> unicodedata.decomposition(u"ñ")
'006E 0303'
>>> print u"u006e u0303"
ñ
                                                           21
¡Muchas gracias!
  ¿Preguntas?

          ¿Sugerencias?


  Facundo Batista
       facundo@taniquetil.com.ar
      http://www.taniquetil.com.ar




    Licencia: Creative Commons
    Atribución-NoComercial-CompartirDerivadasIgual 2.5 Argentina
    http://creativecommons.org/licenses/by-nc-sa/2.5/deed.es_AR
                                                                   22

Weitere ähnliche Inhalte

Was ist angesagt?

Presentacion bite
Presentacion bitePresentacion bite
Presentacion bitemariaudlap
 
Circuitos lógicos MSI TTL
Circuitos lógicos MSI TTL Circuitos lógicos MSI TTL
Circuitos lógicos MSI TTL Andres Bejarano
 
Codigo binario
Codigo binarioCodigo binario
Codigo binariowigido
 
Ejercicios de Multiplexores y decodificadores
Ejercicios de Multiplexores y decodificadoresEjercicios de Multiplexores y decodificadores
Ejercicios de Multiplexores y decodificadoresBertha Vega
 
Laboratorio 02 redes
Laboratorio 02 redesLaboratorio 02 redes
Laboratorio 02 redesstriken00
 
Características sumadore, multiplexores, codificadores, decodificadores y muc...
Características sumadore, multiplexores, codificadores, decodificadores y muc...Características sumadore, multiplexores, codificadores, decodificadores y muc...
Características sumadore, multiplexores, codificadores, decodificadores y muc...Hector Arellano
 
Python básico
Python básicoPython básico
Python básicoCodeSyntax
 

Was ist angesagt? (10)

Presentacion bite
Presentacion bitePresentacion bite
Presentacion bite
 
Circuitos lógicos MSI TTL
Circuitos lógicos MSI TTL Circuitos lógicos MSI TTL
Circuitos lógicos MSI TTL
 
Decodificador
DecodificadorDecodificador
Decodificador
 
Codigo binario
Codigo binarioCodigo binario
Codigo binario
 
Codigo enigma a_nivel_tecnologico
Codigo enigma a_nivel_tecnologicoCodigo enigma a_nivel_tecnologico
Codigo enigma a_nivel_tecnologico
 
Ejercicios de Multiplexores y decodificadores
Ejercicios de Multiplexores y decodificadoresEjercicios de Multiplexores y decodificadores
Ejercicios de Multiplexores y decodificadores
 
Laboratorio 02 redes
Laboratorio 02 redesLaboratorio 02 redes
Laboratorio 02 redes
 
Características sumadore, multiplexores, codificadores, decodificadores y muc...
Características sumadore, multiplexores, codificadores, decodificadores y muc...Características sumadore, multiplexores, codificadores, decodificadores y muc...
Características sumadore, multiplexores, codificadores, decodificadores y muc...
 
ALGORITMO DES
ALGORITMO DESALGORITMO DES
ALGORITMO DES
 
Python básico
Python básicoPython básico
Python básico
 

Andere mochten auch

Exposicion hacker. gastelo wiliam chaname augusto
Exposicion hacker. gastelo wiliam chaname augustoExposicion hacker. gastelo wiliam chaname augusto
Exposicion hacker. gastelo wiliam chaname augustoGastelowilli
 
Pierre et Claude : un duo dynamique
Pierre et Claude : un duo dynamiquePierre et Claude : un duo dynamique
Pierre et Claude : un duo dynamiquemartinhb
 
Curiositats Eclairs(La Foudre)
Curiositats Eclairs(La Foudre)Curiositats Eclairs(La Foudre)
Curiositats Eclairs(La Foudre)Coia Jansa
 
Guia enseñanza taller 1
Guia enseñanza taller 1Guia enseñanza taller 1
Guia enseñanza taller 1NERYS64
 
Herramientas del Internet
Herramientas del InternetHerramientas del Internet
Herramientas del InternetHeidy Andino
 
201605_CValade_CV_LinguistiqueÉcriture
201605_CValade_CV_LinguistiqueÉcriture201605_CValade_CV_LinguistiqueÉcriture
201605_CValade_CV_LinguistiqueÉcritureClaire Valade
 
Cuadro madito 1 anexo
Cuadro madito 1 anexoCuadro madito 1 anexo
Cuadro madito 1 anexoalexmadaras
 
Document
DocumentDocument
DocumentViewOn
 
Enib cours c.a.i. web - séance #5 - langages alternatives dans la jvm
Enib   cours c.a.i. web - séance #5 - langages alternatives dans la jvmEnib   cours c.a.i. web - séance #5 - langages alternatives dans la jvm
Enib cours c.a.i. web - séance #5 - langages alternatives dans la jvmHoracio Gonzalez
 
Retórica visual modos de apelación
Retórica visual modos de apelaciónRetórica visual modos de apelación
Retórica visual modos de apelaciónLuis Domínguez
 
Tout sur ma mère pistes Almodovar
Tout sur ma mère   pistes AlmodovarTout sur ma mère   pistes Almodovar
Tout sur ma mère pistes Almodovarpmougenet
 
Services client et vente : ce que vous ignorez peut vous coûter cher
Services client et vente : ce que vous ignorez peut vous coûter cherServices client et vente : ce que vous ignorez peut vous coûter cher
Services client et vente : ce que vous ignorez peut vous coûter cherSalesforce France
 
Comparer les fonctions si et recherchev dans la construction de feuilles de c...
Comparer les fonctions si et recherchev dans la construction de feuilles de c...Comparer les fonctions si et recherchev dans la construction de feuilles de c...
Comparer les fonctions si et recherchev dans la construction de feuilles de c...Prénom Nom de famille
 
Description personnelle (Karl)
Description personnelle (Karl)Description personnelle (Karl)
Description personnelle (Karl)olivier79
 

Andere mochten auch (20)

Exposicion hacker. gastelo wiliam chaname augusto
Exposicion hacker. gastelo wiliam chaname augustoExposicion hacker. gastelo wiliam chaname augusto
Exposicion hacker. gastelo wiliam chaname augusto
 
Pierre et Claude : un duo dynamique
Pierre et Claude : un duo dynamiquePierre et Claude : un duo dynamique
Pierre et Claude : un duo dynamique
 
Curiositats Eclairs(La Foudre)
Curiositats Eclairs(La Foudre)Curiositats Eclairs(La Foudre)
Curiositats Eclairs(La Foudre)
 
Bienvenue à flanders lane !
Bienvenue à flanders lane !Bienvenue à flanders lane !
Bienvenue à flanders lane !
 
Guia enseñanza taller 1
Guia enseñanza taller 1Guia enseñanza taller 1
Guia enseñanza taller 1
 
Aplicacion de bromuro de metilo, uva de mesa y arandanos Chilenos
Aplicacion de bromuro de metilo, uva de mesa y arandanos ChilenosAplicacion de bromuro de metilo, uva de mesa y arandanos Chilenos
Aplicacion de bromuro de metilo, uva de mesa y arandanos Chilenos
 
Herramientas del Internet
Herramientas del InternetHerramientas del Internet
Herramientas del Internet
 
Realismo
RealismoRealismo
Realismo
 
A qué grupo perteneces
A qué grupo pertenecesA qué grupo perteneces
A qué grupo perteneces
 
201605_CValade_CV_LinguistiqueÉcriture
201605_CValade_CV_LinguistiqueÉcriture201605_CValade_CV_LinguistiqueÉcriture
201605_CValade_CV_LinguistiqueÉcriture
 
Cuadro madito 1 anexo
Cuadro madito 1 anexoCuadro madito 1 anexo
Cuadro madito 1 anexo
 
Need analysis
Need analysisNeed analysis
Need analysis
 
Document
DocumentDocument
Document
 
Enib cours c.a.i. web - séance #5 - langages alternatives dans la jvm
Enib   cours c.a.i. web - séance #5 - langages alternatives dans la jvmEnib   cours c.a.i. web - séance #5 - langages alternatives dans la jvm
Enib cours c.a.i. web - séance #5 - langages alternatives dans la jvm
 
Presentación Emagina Business Solutions 2016
Presentación Emagina Business Solutions 2016Presentación Emagina Business Solutions 2016
Presentación Emagina Business Solutions 2016
 
Retórica visual modos de apelación
Retórica visual modos de apelaciónRetórica visual modos de apelación
Retórica visual modos de apelación
 
Tout sur ma mère pistes Almodovar
Tout sur ma mère   pistes AlmodovarTout sur ma mère   pistes Almodovar
Tout sur ma mère pistes Almodovar
 
Services client et vente : ce que vous ignorez peut vous coûter cher
Services client et vente : ce que vous ignorez peut vous coûter cherServices client et vente : ce que vous ignorez peut vous coûter cher
Services client et vente : ce que vous ignorez peut vous coûter cher
 
Comparer les fonctions si et recherchev dans la construction de feuilles de c...
Comparer les fonctions si et recherchev dans la construction de feuilles de c...Comparer les fonctions si et recherchev dans la construction de feuilles de c...
Comparer les fonctions si et recherchev dans la construction de feuilles de c...
 
Description personnelle (Karl)
Description personnelle (Karl)Description personnelle (Karl)
Description personnelle (Karl)
 

Ähnlich wie Entendiendo Unicode (Facundo Batista)

Introducción a la informática
Introducción a la informática Introducción a la informática
Introducción a la informática daaanyta
 
Generacion codigomaquina
Generacion codigomaquinaGeneracion codigomaquina
Generacion codigomaquinatre_na_gil
 
Trabajo informatica
Trabajo informaticaTrabajo informatica
Trabajo informaticaalbertonm19
 
Tema 3. Hardware
Tema 3. HardwareTema 3. Hardware
Tema 3. HardwarePaco Luque
 
T1 u1.lopezsamuel
T1 u1.lopezsamuelT1 u1.lopezsamuel
T1 u1.lopezsamuelSam Lopez
 
Presentacion_Lenguaje_C.pptx
Presentacion_Lenguaje_C.pptxPresentacion_Lenguaje_C.pptx
Presentacion_Lenguaje_C.pptxIng. Ríos
 
2 bach ud01 - hardware del ordenador
2 bach   ud01 - hardware del ordenador2 bach   ud01 - hardware del ordenador
2 bach ud01 - hardware del ordenadorJuan Serrano Pérez
 
Sistemas numéricos y microprocesadores
Sistemas numéricos y microprocesadoresSistemas numéricos y microprocesadores
Sistemas numéricos y microprocesadoresConfesorAD
 
CAPÍTULO 2 - I PARTE .pptx
CAPÍTULO 2 - I PARTE .pptxCAPÍTULO 2 - I PARTE .pptx
CAPÍTULO 2 - I PARTE .pptxAriadneJaen1
 
Tema 1 introducción a los sistemas de información
Tema 1   introducción a los sistemas de informaciónTema 1   introducción a los sistemas de información
Tema 1 introducción a los sistemas de informaciónSamuel
 
Introducción a la computacón
Introducción a la computacónIntroducción a la computacón
Introducción a la computacónCabrera Miguel
 

Ähnlich wie Entendiendo Unicode (Facundo Batista) (20)

Introducción a la informática
Introducción a la informática Introducción a la informática
Introducción a la informática
 
Generacion codigomaquina
Generacion codigomaquinaGeneracion codigomaquina
Generacion codigomaquina
 
Trabajo informatica
Trabajo informaticaTrabajo informatica
Trabajo informatica
 
Códigos y Modos de Transmisión de Datos
Códigos y Modos de Transmisión de DatosCódigos y Modos de Transmisión de Datos
Códigos y Modos de Transmisión de Datos
 
Tema 3. Hardware
Tema 3. HardwareTema 3. Hardware
Tema 3. Hardware
 
T1 u1.lopezsamuel
T1 u1.lopezsamuelT1 u1.lopezsamuel
T1 u1.lopezsamuel
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Ejemplo1
Ejemplo1Ejemplo1
Ejemplo1
 
Presentacion_Lenguaje_C.pptx
Presentacion_Lenguaje_C.pptxPresentacion_Lenguaje_C.pptx
Presentacion_Lenguaje_C.pptx
 
2 bach ud01 - hardware del ordenador
2 bach   ud01 - hardware del ordenador2 bach   ud01 - hardware del ordenador
2 bach ud01 - hardware del ordenador
 
Conroles y tipos de datos
Conroles y tipos de datosConroles y tipos de datos
Conroles y tipos de datos
 
Sistemas numéricos y microprocesadores
Sistemas numéricos y microprocesadoresSistemas numéricos y microprocesadores
Sistemas numéricos y microprocesadores
 
CAPÍTULO 2 - I PARTE .pptx
CAPÍTULO 2 - I PARTE .pptxCAPÍTULO 2 - I PARTE .pptx
CAPÍTULO 2 - I PARTE .pptx
 
03 - Cadenas en Python 3
03 - Cadenas en Python 303 - Cadenas en Python 3
03 - Cadenas en Python 3
 
Tema 1 introducción a los sistemas de información
Tema 1   introducción a los sistemas de informaciónTema 1   introducción a los sistemas de información
Tema 1 introducción a los sistemas de información
 
Taller de repaso1111111
Taller de repaso1111111Taller de repaso1111111
Taller de repaso1111111
 
Taller de repaso1111111
Taller de repaso1111111Taller de repaso1111111
Taller de repaso1111111
 
Introducción a la computacón
Introducción a la computacónIntroducción a la computacón
Introducción a la computacón
 
Tema2[1].11
Tema2[1].11Tema2[1].11
Tema2[1].11
 
Tema2
Tema2Tema2
Tema2
 

Mehr von Osvaldo Santana Neto

Contruindo um Framework Web de Brinquedo só com Python
Contruindo um Framework Web de Brinquedo só com PythonContruindo um Framework Web de Brinquedo só com Python
Contruindo um Framework Web de Brinquedo só com PythonOsvaldo Santana Neto
 
Dave Thomas - Agile is Dead (GOTO 2015)
Dave Thomas - Agile is Dead (GOTO 2015)Dave Thomas - Agile is Dead (GOTO 2015)
Dave Thomas - Agile is Dead (GOTO 2015)Osvaldo Santana Neto
 
Como funciona um time remoto de desenvolvimento - Caipyra 2018
Como funciona um time remoto de desenvolvimento - Caipyra 2018Como funciona um time remoto de desenvolvimento - Caipyra 2018
Como funciona um time remoto de desenvolvimento - Caipyra 2018Osvaldo Santana Neto
 
Escalando times através do trabalho remoto
Escalando times através do trabalho remotoEscalando times através do trabalho remoto
Escalando times através do trabalho remotoOsvaldo Santana Neto
 
Plataforma distribuída de Microserviços ou, como a Olist funciona
Plataforma distribuída de Microserviços ou, como a Olist funcionaPlataforma distribuída de Microserviços ou, como a Olist funciona
Plataforma distribuída de Microserviços ou, como a Olist funcionaOsvaldo Santana Neto
 
Real Life Hackers @ PechaKucha 20x20
Real Life Hackers @ PechaKucha 20x20Real Life Hackers @ PechaKucha 20x20
Real Life Hackers @ PechaKucha 20x20Osvaldo Santana Neto
 
De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e DjangoOsvaldo Santana Neto
 
Como me tornei um empreendedor pythonista
Como me tornei um empreendedor pythonistaComo me tornei um empreendedor pythonista
Como me tornei um empreendedor pythonistaOsvaldo Santana Neto
 
Matando (ou quase) Unicode(De|En)codeErrors (lightning talk)
Matando (ou quase) Unicode(De|En)codeErrors (lightning talk)Matando (ou quase) Unicode(De|En)codeErrors (lightning talk)
Matando (ou quase) Unicode(De|En)codeErrors (lightning talk)Osvaldo Santana Neto
 
Ludeos - Venda seu conteúdo online (how it works)
Ludeos - Venda seu conteúdo online (how it works)Ludeos - Venda seu conteúdo online (how it works)
Ludeos - Venda seu conteúdo online (how it works)Osvaldo Santana Neto
 
App Engine: aplicações escaláveis em poucas horas
App Engine: aplicações escaláveis em poucas horasApp Engine: aplicações escaláveis em poucas horas
App Engine: aplicações escaláveis em poucas horasOsvaldo Santana Neto
 

Mehr von Osvaldo Santana Neto (20)

Basic Brainf*ck
Basic Brainf*ckBasic Brainf*ck
Basic Brainf*ck
 
Contruindo um Framework Web de Brinquedo só com Python
Contruindo um Framework Web de Brinquedo só com PythonContruindo um Framework Web de Brinquedo só com Python
Contruindo um Framework Web de Brinquedo só com Python
 
A Web é uma API
A Web é uma APIA Web é uma API
A Web é uma API
 
Dave Thomas - Agile is Dead (GOTO 2015)
Dave Thomas - Agile is Dead (GOTO 2015)Dave Thomas - Agile is Dead (GOTO 2015)
Dave Thomas - Agile is Dead (GOTO 2015)
 
Olist Architecture v2.0
Olist Architecture v2.0Olist Architecture v2.0
Olist Architecture v2.0
 
Advanced Brainf*ck
Advanced Brainf*ckAdvanced Brainf*ck
Advanced Brainf*ck
 
Corrigindo Bugs no CPython
Corrigindo Bugs no CPythonCorrigindo Bugs no CPython
Corrigindo Bugs no CPython
 
Como funciona um time remoto de desenvolvimento - Caipyra 2018
Como funciona um time remoto de desenvolvimento - Caipyra 2018Como funciona um time remoto de desenvolvimento - Caipyra 2018
Como funciona um time remoto de desenvolvimento - Caipyra 2018
 
Escalando times através do trabalho remoto
Escalando times através do trabalho remotoEscalando times através do trabalho remoto
Escalando times através do trabalho remoto
 
Plataforma distribuída de Microserviços ou, como a Olist funciona
Plataforma distribuída de Microserviços ou, como a Olist funcionaPlataforma distribuída de Microserviços ou, como a Olist funciona
Plataforma distribuída de Microserviços ou, como a Olist funciona
 
Real Life Hackers @ PechaKucha 20x20
Real Life Hackers @ PechaKucha 20x20Real Life Hackers @ PechaKucha 20x20
Real Life Hackers @ PechaKucha 20x20
 
De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e Django
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
Curso de Python e Django
Curso de Python e DjangoCurso de Python e Django
Curso de Python e Django
 
Como me tornei um empreendedor pythonista
Como me tornei um empreendedor pythonistaComo me tornei um empreendedor pythonista
Como me tornei um empreendedor pythonista
 
TDD com Python
TDD com PythonTDD com Python
TDD com Python
 
Matando (ou quase) Unicode(De|En)codeErrors (lightning talk)
Matando (ou quase) Unicode(De|En)codeErrors (lightning talk)Matando (ou quase) Unicode(De|En)codeErrors (lightning talk)
Matando (ou quase) Unicode(De|En)codeErrors (lightning talk)
 
Ludeos - Venda seu conteúdo online (how it works)
Ludeos - Venda seu conteúdo online (how it works)Ludeos - Venda seu conteúdo online (how it works)
Ludeos - Venda seu conteúdo online (how it works)
 
App Engine: aplicações escaláveis em poucas horas
App Engine: aplicações escaláveis em poucas horasApp Engine: aplicações escaláveis em poucas horas
App Engine: aplicações escaláveis em poucas horas
 
Programação RAD com Python
Programação RAD com PythonProgramação RAD com Python
Programação RAD com Python
 

Kürzlich hochgeladen

CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 

Kürzlich hochgeladen (16)

CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 

Entendiendo Unicode (Facundo Batista)

  • 2. ¿Qué es Unicode? Un estándar ¿Pero en qué consiste? Un repertorio de más de 100 mil caracteres Planillas de códigos para referencia visual Metodologías de codificación Codificaciones estándares Enumeración de propiedades de los caracteres Etc... 2
  • 3. ¿Pero esto cómo se come? 3
  • 4. Masticando un Code Chart Una planilla de códigos es una tabla con el dibujo de cada caracter El mapa completo de caracteres de Unicode está divido en varios codecharts Por ejemplo: Basic Latin Latin-1 Greek Runic 4
  • 5. Un estándar con carácter Por cada caracter tenemos: Un glifo (de referencia, no prescriptivo) Un nombre Un número Más info Ejemplo: 03C0 GREEK SMALL LETTER PI math constant 3.141592... 5
  • 6. ¿Y en Python? Definimos el caracter según su código >>> pi = u"u03c0" >>> len(pi) 1 ¿Y cómo se ve? >>> print pi π >>> pi u'u03c0' >>> pi == u"π" True 6
  • 7. Bititos Unicode es muy lindo... ¿pero como lo persistimos o transmitimos? Tenemos que traducir los caracteres Unicode a bits. Codificar o Encode Pasar de un caracter Unicode a una secuencia de bytes Decodificar o Decode Pasar de una secuencia de bytes a un caracter Unicode 7
  • 9. ¿No es directo? Necesitamos codificar la información de una forma estándar No es exclusivo de Unicode, nos pasa con los números también Ejemplo: Números Negativos: Complemento a 1 o a 2 -3 puede ser (bin) 1100 o 1101 Punto flotante: Precisión simple y cuádruple 1.0 puede ser (hex) 3F80 0000 o 3FFF 0000 0000 0000 0000 0000 0000 0000 9
  • 10. Codificando Unicode ¿Cómo representamos en bits un caracter Unicode? Tenemos que inventar un código Definir cuantos bits usará Definir las reglas de conversión Ya tenemos muchos códigos estándares ASCII Latin-1 (ISO-8859-1) UTF-8, -16, -32 etc 10
  • 11. Distintas formas de lo mismo Distintos encodings, distintos bytes: >>> enie = u"ñ" >>> enie.encode("latin1") 'xf1' >>> enie.encode("utf8") 'xc3xb1' >>> enie.encode("utf16") 'xffxfexf1x00' ¿Pero cómo hacemos la decodificación? Necesitamos sí o sí saber el código usado 11
  • 12. ¿Pero cuál uso? Latin1 Está muy extendido No se mantiene desde 2004 No representa todos los caracteres: >>> print pi π >>> pi.encode("latin1") ... UnicodeEncodeError: 'latin-1' codec can't encode character u'u03c0'... Se utiliza un byte Primeros 128 caracteres: ASCII Segundos 128: para lenguajes de Europa occidental 12
  • 13. ¿Pero cuál uso? UTF-16 Soporta todos los caracteres Pero tenemos que perder dos bytes por caracter (más el BOM!) Incluso si utilizamos caracteres simples, como en esta linea. >>> u"esta".encode("utf16") 'xffxfeex00sx00tx00ax00' >>> # FFFE 6500 7300 7400 6100 Utiliza desde 2 bytes Usa dos bytes para el BMP, pero puede usar 4 bytes Se justifica si siempre tengo caracteres raros No es UCS-2 (el cual usa 2 bytes fijos) 13
  • 14. ¿Pero cuál uso? UTF-8 Es el estándar en Linux Soporta todo el espacio Unicode Utiliza uno, dos, tres y cuatro bytes, según necesite >>> u"k".encode("utf8") 'k' >>> u"ñ".encode("utf8") 'xc3xb1' >>> u" 쏔 ".encode("utf8") 'xecx8fx94' Nunca se desactualizaría 14
  • 15. uteefe-ocho 8 bits para los 128 caracteres ASCII 0-7F: 0zzzzzzz 16 bits para letras latinas y de otros idiomas 80-7FF: 110yyyyy 10zzzzzz 24 bits para el resto del BMP 800-D7FF y E000-FFFF: 1110xxxx 10yyyyyy 10zzzzzz 32 bits para el resto de Unicode 10000–10FFFF: 11110www 10xxxxxx 10yyyyyy 10zzzzzz 15
  • 16. Encoding & Decoding >>> pi u'u03c0' >>> d = pi.encode("utf8") >>> d 'xcfx80' >>> d.decode("utf8") u'u03c0' Python guarda las cadenas Unicode como bits Usa una codificación interna en particular Se decide al compilar Python: UCS-2 o UCS-4 16
  • 17. Y dale... ¡Hasta que lo sepan de memoria! 17
  • 18. Reglas de oro Internamente siempre utilizar Unicode >>> dato = 'mxc3xa1scara' # máscara en UTF8 >>> len(dato) 8 >>> print dato[:4] más >>> print dato.upper() MáSCARA Codificar y decodificar en los bordes encode/decode codecs.open() 18
  • 19. Siempre en los bordes >>> nomapell = MiBDDWrapper(foo, bar) 1. Leemos de una >>> nomapell 'xc5mal xd6fwerman' fuente externa >>> completo = nomapell.decode("latin1") >>> completo 3. Procesamos u'xc5mal xd6fwerman' internamente >>> print completo >>> n, a = completo.split() Åmal Öfwerman >>> tit = "%s, %s" % (a, n) >>> print tit Öfwerman, Åmal 2. Pasamos a Unicode (decode) >>> titok = tit.encode("utf8") 4. Pasamos a bytes >>> titok 'xc3x96fwerman, xc3x85mal' (encode) Ejemplo! 5. Dejamos el resultado >>> alHTML(titok) 19
  • 20. Código fuente Unicode Caracteres Unicode en nuestro código El editor también debe traducir a bytes ¡Lo codifica! El intérprete de Python debe saber leerlo ¡Lo decodifica! Tiene que saber qué encoding se usó #-*- coding: X -*- 20
  • 21. Cosas piolas >>> unicodedata.name(pi) 'GREEK SMALL LETTER PI' >>> print unicodedata.lookup("GREEK SMALL LETTER THETA") θ >>> print u"caño de desagüe".upper() CAÑO DE DESAGÜE >>> print pi, pi.upper() πΠ >>> unicodedata.decomposition(u"ñ") '006E 0303' >>> print u"u006e u0303" ñ 21
  • 22. ¡Muchas gracias! ¿Preguntas? ¿Sugerencias? Facundo Batista facundo@taniquetil.com.ar http://www.taniquetil.com.ar Licencia: Creative Commons Atribución-NoComercial-CompartirDerivadasIgual 2.5 Argentina http://creativecommons.org/licenses/by-nc-sa/2.5/deed.es_AR 22