Agradeceríamos tu apoyo para compartir nuestros artículos acerca de las ciencias de la computación.
Solución:
Por extraño que parezca, nadie señaló cómo calcular cuántos bytes está tomando un carácter Unicode. Esta es la regla para las cadenas codificadas en UTF-8:
Binary Hex Comments
0xxxxxxx 0x00..0x7F Only byte of a 1-byte character encoding
10xxxxxx 0x80..0xBF Continuation byte: one of 1-3 bytes following the first
110xxxxx 0xC0..0xDF First byte of a 2-byte character encoding
1110xxxx 0xE0..0xEF First byte of a 3-byte character encoding
11110xxx 0xF0..0xF7 First byte of a 4-byte character encoding
Entonces la respuesta rápida es: toma de 1 a 4 bytes, dependiendo del primero que indicará cuántos bytes tomará.
No verá una respuesta simple porque no la hay.
Primero, Unicode no contiene “todos los caracteres de todos los idiomas”, aunque seguro que lo intenta.
Unicode en sí mismo es un mapeo, define puntos de código y un punto de código es un número, asociado con generalmente un personaje. Digo usualmente porque hay conceptos como combinar personajes. Es posible que esté familiarizado con cosas como acentos o diéresis. Esos se pueden usar con otro personaje, como un a
o un u
para crear un nuevo carácter lógico. Por lo tanto, un carácter puede constar de 1 o más puntos de código.
Para que sea útil en los sistemas informáticos, necesitamos elegir una representación para esta información. Esas son las diversas codificaciones Unicode, como utf-8, utf-16le, utf-32, etc. Se distinguen en gran medida por el tamaño de sus unidades de código. UTF-32 es la codificación más simple, tiene una unidad de código de 32 bits, lo que significa que un punto de código individual encaja cómodamente en una unidad de código. Las otras codificaciones tendrán situaciones en las que un punto de código necesitará varias unidades de código, o ese punto de código en particular no se puede representar en la codificación (este es un problema, por ejemplo, con UCS-2).
Debido a la flexibilidad de combinar caracteres, incluso dentro de una codificación determinada, el número de bytes por carácter puede variar según el carácter y la forma de normalización. Este es un protocolo para tratar con personajes que tienen más de una representación (se puede decir "an 'a' with an accent"
que son 2 puntos de código, uno de los cuales es un carácter combinado o "accented 'a'"
que es un punto de código).
Sé que esta pregunta es antigua y ya tiene una respuesta aceptada, pero quiero ofrecer algunos ejemplos (espero que sea útil para alguien).
Hasta donde yo sé, los caracteres ASCII antiguos ocupaban un byte por carácter.
Derecha. En realidad, dado que ASCII es una codificación de 7 bits, admite 128 códigos (95 de los cuales son imprimibles), por lo que solo usa medio byte (si eso tiene algún sentido).
¿Cuántos bytes requiere un carácter Unicode?
Unicode solo asigna caracteres a puntos de código. No define cómo codificarlos. Un archivo de texto no contiene caracteres Unicode, sino bytes/octetos que pueden representar caracteres Unicode.
Supongo que un carácter Unicode puede contener todos los caracteres posibles de cualquier idioma, ¿estoy en lo correcto?
No. Pero casi. Así que básicamente sí. Pero todavía no.
Entonces, ¿cuántos bytes necesita por carácter?
Igual que tu segunda pregunta.
¿Y qué significan UTF-7, UTF-6, UTF-16, etc.? ¿Son algún tipo de versiones Unicode?
No, esas son codificaciones. Definen cómo los bytes/octetos deben representar los caracteres Unicode.
Un par de ejemplos. Si algunos de ellos no se pueden mostrar en su navegador (probablemente porque la fuente no los admite), vaya a http://codepoints.net/U+1F6AA
(reemplazar 1F6AA
con el punto de código en hexadecimal) para ver una imagen.
-
- U+0061 LETRA A MINÚSCULA LATINA:
a
- Nº: 97
- UTF-8: 61
- UTF-16: 00 61
- U+0061 LETRA A MINÚSCULA LATINA:
-
- U+00A9 SIGNO DE DERECHOS DE AUTOR:
©
- Nº: 169
- UTF-8: C2 A9
- UTF-16: 00 A9
- U+00AE FIRMA REGISTRADA:
®
- Nº: 174
- UTF-8: C2 AE
- UTF-16: 00 AE
- U+00A9 SIGNO DE DERECHOS DE AUTOR:
-
- U+1337 SÍLABA ETIÓPICA PHWA:
ጷ
- Nº: 4919
- UTF-8: E1 8C B7
- UTF-16: 13 37
- U + 2014 EM DASH:
—
- Nº: 8212
- UTF-8: E2 80 94
- UTF-16: 20 14
- U+2030 POR MIL SIGNO:
‰
- Nº: 8240
- UTF-8: E2 80 B0
- UTF-16: 20 30
- SIGNO DEL EURO U+20AC:
€
- Nº: 8364
- UTF-8: E2 82 CA
- UTF-16: 20 CA
- U+2122 SIGNO DE MARCA COMERCIAL:
™
- Nº: 8482
- UTF-8: E2 84 A2
- UTF-16: 21 22
- U+2603 MUÑECO DE NIEVE:
☃
- Nº: 9731
- UTF-8: E2 98 83
- UTF-16: 26 03
- TELÉFONO U+260E NEGRO:
☎
- Nº: 9742
- UTF-8: E2 98 8E
- UTF-16: 26 0E
- U+2614 PARAGUAS GOTAS DE LLUVIA:
☔
- Nº: 9748
- UTF-8: E2 98 94
- UTF-16: 26 14
- U+263A CARA SONRIENTE BLANCA:
☺
- Nº: 9786
- UTF-8: E2 98 BA
- UTF-16: 26 3A
- U+2691 BANDERA NEGRA:
⚑
- Nº: 9873
- UTF-8: E2 9A 91
- UTF-16: 26 91
- SÍMBOLO DEL ÁTOMO U+269B:
⚛
- Nº: 9883
- UTF-8: E2 9A 9B
- UTF-16: 26 9B
- U+2708 AVIÓN:
✈
- Nº: 9992
- UTF-8: E2 9C 88
- UTF-16: 27 08
- U+271E CRUZ LATINA BLANCA SOMBREADA:
✞
- Nº: 10014
- UTF-8: E2 9C 9E
- UTF-16: 27 1E
- CARA DE LA MARCA POSTAL U+3020:
〠
- Nº: 12320
- UTF-8: E3 80 A0
- UTF-16: 30 20
- U+8089 CJK IDEÓGRAFO UNIFICADO-8089:
肉
- Nº: 32905
- UTF-8: E8 82 89
- UTF-16: 80 89
- U+1337 SÍLABA ETIÓPICA PHWA:
-
- U+1F4A9 MONTÓN DE CACA:
- Nº: 128169
- UTF-8: F0 9F 92 A9
- UTF-16: D8 3D CC A9
- COHETE U+1F680:
- Nº: 128640
- UTF-8: F0 9F 9A 80
- UTF-16: D8 3D DE 80
- U+1F4A9 MONTÓN DE CACA:
bueno me dejo llevar…
Hechos graciosos:
- Si está buscando un carácter específico, puede copiarlo y pegarlo en http://codepoints.net/.
- Perdí mucho tiempo en esta lista inútil (¡pero está ordenada!).
- MySQL tiene un conjunto de caracteres llamado “utf8” que en realidad no admite caracteres de más de 3 bytes. Por lo tanto, no puede insertar una pila de caca, el campo se truncará en silencio. Utilice “utf8mb4” en su lugar.
- Hay una página de prueba del muñeco de nieve (unicodesnowmanforyou.com).
Calificaciones y reseñas
Finalizando este artículo puedes encontrar las reseñas de otros programadores, tú también eres capaz dejar el tuyo si dominas el tema.