[pyar] Mi versión de la charla de Unicode

Fernando Pelliccioni fpelliccioni en gmail.com
Vie Sep 23 17:20:05 ART 2016


On Sep 18, 2016 23:21, "Sebastian Bassi" <sebastian.bassi en globant.com>
wrote:
>
> 2016-09-17 5:27 GMT-07:00 Fernando Pelliccioni <fpelliccioni en gmail.com>:
>>
>> Muy buena presentación!
>>
>> Una pequeña corrección:
>> "UTF-16: Supports all chars. 2 bytes per char (plus BOM)"
>>
>> Por: "...2 bytes per code unit...".
>>
>> En UTF-16 los code units son de 16 bits, los code points pueden estar
formados por 1 o 2 code units (16 o 32 bits, variable length encoding).
>> Un caracter en general está "encodeado" con un sólo code point, pero hay
casos en los cuales se necesita más de un code point para encodear un
caracter.
>
> ​No tenia clara la diferencia entre code points y code unit. Cuando decis
que un code point está formado por 1 o 2 code units, me podes dar un
ejemplo? ¿Te referis a cosas como que la ñ se forma con n y ~ u otra cosa?​

Un Code Point es un valor numérico dentro del codespace de Unicode. Esto no
dice mucho, asíque voy a usar tu ejemplo.

El Code point U+006E y es representado gráficamente como "n".

En UTF-8 es "encodeado" como un único code unit: 0x6e (coincide con ASCII).
Los  code units en UTF-8 son se 8 bits (1 octeto).

En UTF-16, también  es encodeado como un único code unit: 0x006e, pero en
UTF-16 los code units son de 16 bits.

Pero hay otros casos en los que se necesita más de un code unit para
encodear un code point. Ejemplo
U+3243F

UTF-8: 4 code units: 0xf0, 0xb2, 0x90, 0xbf

UTF-16: 2 code units: 0xd889, 0xdc3f

UTF-32: 1 code unit: 0x0003243f

Resumiendo, un code point es independiente al encoding. Un code unit es la
unidad elemental de cada encoding siendo 8, 16 y 32 bits para UTF8, UTF16 y
UTF32 respectivamente. Para representar un code point, en UTF8 necesitamos
de 1, 2, 3 o 4 code units; en UTF16: 1 o 2 code units; y en UTF32 todos los
code points son representables usan un único code unit  (fixed-length
encoding).

Esto anterior fue referido a la relación code point/code unit, ahora con
respecto a caracteres/code points, es como vos decís, hay caracteres que se
pueden formar usando 2 code points como el caso de la "ñ", que se puede
formar usando los code points U+006e y U+0303 ("n" y tilde), pero en este
caso la "ñ" tiene un code point específico: U+00f1. Hay otros caracteres en
los que no queda otra que formarlos usando 2 code points.

>
>>
>> UTF-8 Y UTF-32 también soportan todos los caracteres.
>>
>> No sé si oralmente hacés mención, pero quizás sea interesante decir cual
el  encoding usado en la representación interna de strings en CPython.
>> Antes de CPython 3.3 usaban UCS-2¿? y a partir de 3.3 comienzan a usar
lo propuesto por el PEP393.
>>
>> http://legacy.python.org/dev/peps/pep-0393/
>
>
> ​Hay cosas que no están en la presentación escrita pero si las dije, pero
esa especificamente no porque para entrarla en 30 minutos algo tenia que
dejar afuera, por lo que saqué la mayoría de las internals de Python (habia
que priorizar).
>
> Gracias por el feedback.​
>
>
> The information contained in this e-mail may be confidential. It has been
sent for the sole use of the intended recipient(s). If the reader of this
message is not an intended recipient, you are hereby notified that any
unauthorized review, use, disclosure, dissemination, distribution or
copying of this communication, or any of its contents,
is strictly prohibited. If you have received it by mistake please let us
know by e-mail immediately and delete it from your system. Many thanks.
>
>
>
> La información contenida en este mensaje puede ser confidencial. Ha sido
enviada para el uso exclusivo del destinatario(s) previsto. Si el lector de
este mensaje no fuera el destinatario previsto, por el presente queda Ud.
notificado que cualquier lectura, uso, publicación, diseminación,
distribución o copiado de esta comunicación o su contenido está
estrictamente prohibido. En caso de que Ud. hubiera recibido este mensaje
por error le agradeceremos notificarnos por e-mail inmediatamente y
eliminarlo de su sistema. Muchas gracias.
>
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20160923/03ec9741/attachment.html>


Más información sobre la lista de distribución pyar