Saltar al contenido

¿Cuántos bytes ocupa un carácter Unicode?

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

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *