Qué es la codificación de caracteres
Cuando hablamos de codificación de caracteres en informática nos referimos al método que permite convertir un caracter de un lenguaje natural (alfabeto o silabario) en un símbolo de otro sistema de representación, por ejemplo en un número, una secuencia de pulsos eléctricos en un sistema electrónico, octetos aplicando normas o reglas de codificación. Esto con la finalidad de facilitar el almacenamiento de texto en computadoras o para facilitar la transmisión de texto a través de la redes de telecomunicaciones, un ejemplo muy simple puede ser el del código morse.
Convencionalmente juego de caracteres y codificación de caracteres eran considerados sinónimos, por eso se puede defirnir a ambos cómo charset que es un completo sistema de codificación de caracteres en una secuencia de octetos.
Tipos principales de codificación
También son llamadas normas de codificación y definen la forma en la que se codifica un carácter dado en un símbolo en otro sistema de representación, aquí sólo voy a definir los más utilizados:
ASCII
De sus siglas en inglés American Standard Code for Information Interchange (Código Estadounidense Estándar para el Intercambio de Información), pronunciado generalmente [áski], es un código de caracteres basado en el alfabeto latino tal como se usa en inglés moderno y en otras lenguas occidentales. Fue creado en 1963 por el Comité Estadounidense de Estándares (ASA, conocido desde 1969 como el Instituto Estadounidense de Estándares Nacionales, o ANSI) como una refundición o evolución de los conjuntos de códigos utilizados entonces en telegrafía. Más tarde, en 1967, se incluyeron las minúsculas, y se redefinieron algunos códigos de control para formar el código conocido como US-ASCII.
El código ASCII utiliza 7 bits para representar los caracteres, aunque inicialmente empleaba un bit adicional (bit de paridad) que se usaba para detectar errores en la transmisión. A menudo se llama incorrectamente ASCII a otros códigos de caracteres de 8 bits, como el estándar ISO-8859-1 que es una extensión que utiliza 8 bits para proporcionar caracteres adicionales usados en idiomas distintos al inglés, como el español.
Casi todos los sistemas informáticos actuales utilizan el código ASCII o una extensión compatible para representar textos y para el control de dispositivos que manejan texto.
ASCII, como otros códigos de representación de caracteres, especifica una correspondencia entre cadenas de bits y símbolos escritos de la lengua, permitiendo de esta forma la comunicación entre dispositivos digitales así como su procesado y almacenamiento. El código de caracteres ASCII[1] — o una extensión compatible (ver más abajo) — se usa casi en todos los ordenadores, especialmente ordenadores personales y estaciones de trabajo. El nombre más apropiado para este código de caracteres es «US-ASCII».[2]
! » # $ % & \’ ( ) * + , – . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _
` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~
ASCII es, en sentido estricto, un código de siete bits, lo que significa que usa cadenas de bits representables con siete dígitos binarios (que van de 0 a 127 en base decimal) para representar información de caracteres. En el momento en el que se introdujo el código ASCII muchos ordenadores trabajaban con grupos de ocho bits (bytes u octetos), como la unidad mínima de información; donde el octavo bit se usaba habitualmente como bit de paridad con funciones de control de errores en líneas de comunicación u otras funciones específicas del dispositivo. Las máquinas que no usaban la comprobación de paridad asignaban al octavo bit el valor cero en la mayoría de los casos, aunque otros sistemas como las computadoras Prime, que ejecutaban PRIMOS ponían el octavo bit del código ASCII a uno.
El código ASCII define una relación entre caracteres específicos y secuencias de bits; además de reservar unos cuantos códigos de control para el procesador de textos, y no define ningún mecanismo para describir la estructura o la apariencia del texto en un documento; estos asuntos están especificados por otros lenguajes como los lenguajes de etiquetas.
Caracteres Imprimibles en ASCII
Binario | Decimal | Hexadecimal | Representación |
---|---|---|---|
0010 0000 | 32 | 20 | espacio ( ) |
0010 0001 | 33 | 21 | ! |
0010 0010 | 34 | 22 | « |
0010 0011 | 35 | 23 | # |
0010 0100 | 36 | 24 | $ |
0010 0101 | 37 | 25 | % |
0010 0110 | 38 | 26 | & |
0010 0111 | 39 | 27 | \’ |
0010 1000 | 40 | 28 | ( |
0010 1001 | 41 | 29 | ) |
0010 1010 | 42 | 2A | * |
0010 1011 | 43 | 2B | + |
0010 1100 | 44 | 2C | , |
0010 1101 | 45 | 2D | – |
0010 1110 | 46 | 2E | . |
0010 1111 | 47 | 2F | / |
0011 0000 | 48 | 30 | 0 |
0011 0001 | 49 | 31 | 1 |
0011 0010 | 50 | 32 | 2 |
0011 0011 | 51 | 33 | 3 |
0011 0100 | 52 | 34 | 4 |
0011 0101 | 53 | 35 | 5 |
0011 0110 | 54 | 36 | 6 |
0011 0111 | 55 | 37 | 7 |
0011 1000 | 56 | 38 | 8 |
0011 1001 | 57 | 39 | 9 |
0011 1010 | 58 | 3A | : |
0011 1011 | 59 | 3B | ; |
0011 1100 | 60 | 3C | < |
0011 1101 | 61 | 3D | = |
0011 1110 | 62 | 3E | > |
0011 1111 | 63 | 3F | ? |
0100 0000 | 64 | 40 | @ |
0100 0001 | 65 | 41 | A |
0100 0010 | 66 | 42 | B |
0100 0011 | 67 | 43 | C |
0100 0100 | 68 | 44 | D |
0100 0101 | 69 | 45 | E |
0100 0110 | 70 | 46 | F |
0100 0111 | 71 | 47 | G |
0100 1000 | 72 | 48 | H |
0100 1001 | 73 | 49 | I |
0100 1010 | 74 | 4A | J |
0100 1011 | 75 | 4B | K |
0100 1100 | 76 | 4C | L |
0100 1101 | 77 | 4D | M |
0100 1110 | 78 | 4E | N |
0100 1111 | 79 | 4F | O |
0101 0000 | 80 | 50 | P |
0101 0001 | 81 | 51 | Q |
0101 0010 | 82 | 52 | R |
0101 0011 | 83 | 53 | S |
0101 0100 | 84 | 54 | T |
0101 0101 | 85 | 55 | U |
0101 0110 | 86 | 56 | V |
0101 0111 | 87 | 57 | W |
0101 1000 | 88 | 58 | X |
0101 1001 | 89 | 59 | Y |
0101 1010 | 90 | 5A | Z |
0101 1011 | 91 | 5B | [ |
0101 1100 | 92 | 5C | \\ |
0101 1101 | 93 | 5D | ] |
0101 1110 | 94 | 5E | ^ |
0101 1111 | 95 | 5F | _ |
0110 0000 | 96 | 60 | ` |
0110 0001 | 97 | 61 | a |
0110 0010 | 98 | 62 | b |
0110 0011 | 99 | 63 | c |
0110 0100 | 100 | 64 | d |
0110 0101 | 101 | 65 | e |
0110 0110 | 102 | 66 | f |
0110 0111 | 103 | 67 | g |
0110 1000 | 104 | 68 | h |
0110 1001 | 105 | 69 | i |
0110 1010 | 106 | 6A | j |
0110 1011 | 107 | 6B | k |
0110 1100 | 108 | 6C | l |
0110 1101 | 109 | 6D | m |
0110 1110 | 110 | 6E | n |
0110 1111 | 111 | 6F | o |
0111 0000 | 112 | 70 | p |
0111 0001 | 113 | 71 | q |
0111 0010 | 114 | 72 | r |
0111 0011 | 115 | 73 | s |
0111 0100 | 116 | 74 | t |
0111 0101 | 117 | 75 | u |
0111 0110 | 118 | 76 | v |
0111 0111 | 119 | 77 | w |
0111 1000 | 120 | 78 | x |
0111 1001 | 121 | 79 | y |
0111 1010 | 122 | 7A | z |
0111 1011 | 123 | 7B | { |
0111 1100 | 124 | 7C | | |
0111 1101 | 125 | 7D | } |
0111 1110 | 126 | 7E | ~ |
ASCII Extendido
Se denomina ASCII extendido a cualquier juego de caracteres de 8 bits en el cual los códigos 32 a 126 (0x20 a 0x7E) coinciden con los caracteres imprimibles de ASCII, así como los caracteres comúnmente llamados «de espacio», estos son los códigos de control de 8 a 13 (0x08 a 0x0D), ambos inclusive.
Las codificaciones de ASCII extendido utilizan además parte o la totalidad de los códigos superiores a 128 para codificar caracteres adicionales a los caracteres imprimibles ASCII.
Codificaciones «ASCII extendido» más comunes:
- Página de códigos 437 (usual en las versiones en inglés del IBM PC y MS-DOS)
- Página de códigos 850 (usual en las versiones de Europa occidental del IBM PC y MS-DOS)
- Latin-1 (ISO-8859-1) (típico de Unix y, con modificaciones, en Microsoft Windows y Macintosh)
Unicode
Unicode es un estándar industrial cuyo objetivo es proporcionar el medio por el cual un texto en cualquier forma e idioma pueda ser codificado para el uso informático.
El establecimiento de Unicode ha involucrado un ambicioso proyecto para reemplazar los esquemas de codificación de caracteres existentes, muchos de los cuales están muy limitados en tamaño y son incompatibles con entornos multilingües. Unicode se ha vuelto el más extenso y completo esquema de codificación de caracteres, siendo el más dominante en la internacionalización y adaptación local del software informático. El estándar ha sido implementado en un número considerable de tecnologías recientes, que incluyen XML, Java y sistemas operativos modernos.
Unicode cubre la mayor parte de las escrituras usadas actualmente, incluyendo: Árabe, Armenio, Bengalí, Birmano, Braille, Sílabas aborígenes canadienses, Cheroqui, Copto, Cirílico, Devanāgarī, Esperanto, Ge\’ez, Georgiano, Griego, Guyaratí, Gurmukhi, Hangul (Coreano), Han (Kanji, Hanja y Hanzi), Japonés (Kanji, Hiragana y Katakana), Hebreo, Jémer (Camboyano), Kannada (Canarés), Lao, Latino, Malayalam, Mongol, Oriya, Syriac, Tailandés (Thai), Tamil, Tibetano, Yi, Zhuyin (Bopomofo)
Unicode ha ido añadiendo escrituras y cubrirá aún más, incluyendo escrituras históricas menos utilizadas, incluso aquellas extinguidas para propósitos académicos: Cuneiforme, Griego antiguo, Lineal B, Fenicio, Rúnico, Sumerio, Ugarítico.
Por el momento Unicode solamente ha sido mostrado como una manera de asignar un código único a cada carácter utilizado en los lenguajes escritos del mundo. El almacenamiento de esos números en el procesamiento de textos es otro tema; los problemas surgen del hecho que mucho del software escrito puede manejar solamente codificación de caracteres de 8 bits, con respaldo a Unicode agregado recientemente de forma lenta. De manera similar en cuanto a la representación de caracteres de Asia, los caracteres de doble byte no pueden codificar más que 65.536 caracteres, y en la practica las arquitecturas elegidas imponen límites muy pequeños. Tales límites no son suficientes ni siquiera para las necesidades escolares del lenguaje Chino.
La lógica interna de la mayoría del software de 8 bits permite de forma típica solamente 8 bits para cada carácter, haciendo imposible utilizar más de 256 puntos en código sin procesamiento especial. El software de 16 bits solamente puede guardar poco más de 6 decenas de miles de caracteres. Unicode, por otro lado ha definido más de 90.000 caracteres codificados. Los diseñadores de los sistemas entonces han tenido que sugerir muchos métodos y mecanismos para implementar Unicode; el método implementado depende del espacio de almacenamiento disponible, la compatibilidad de los códigos fuentes y la inter-operatividad con otros sistemas.
Unicode define dos métodos de «mapeo» o de localización de caracteres:
- La codificación UTF (Unicode Transformation Format) Formato de Transformación Unicode.
- La codificación UCS (Universal Character Set) Juego de Caracteres Universal.
Las codificaciones incluyen:
- UTF-7 — una codificación relativamente poco popular de 7 bits, a menudo considerada obsoleta.
- UTF-8 — una codificacón de 8 bits de longitud variable
- UCS-2 — una codificación de 16 bits de longitud fija que solamente permite el «mapeo» o la búsqueda en la Plana Básica Multilengüe.
- UTF-16 — una codificación de 16 bits de longitud variable.
- UCS-4 y UTF-32 — un par de codificaciones de 32 bits de longitud fija que son funcionalmente idénticas.
- UTF-EBCDIC — una codificación poco difundida creada para sistemas basados en EBCDIC.
Los números en los nombres de los códigos indican la cantidad de bits de cada carácter (para las codificaciones UTF) o el número de bytes por carácter (para las UCS).
A continuación se describen en el mismo orden algunos detalles sobre cada tipo de codificacón:
UTF-8 utiliza de uno hasta 4 bytes por cada punto de código y, siendo relativamente compacto (para la escritura basada en caracteres latinos) y compatible con ASCII. Proporciona la codificación estándar para el intercambio de texto en Unicode. También es utilizado por las más recientes versiones de Linux como reemplazo a la herencia de códigos en el manejo de textos en general.
Las codificaciones UCS-2 y UTF-16 especifican la BOM o la Marca de Orden de Byte especifica el Unicode para usarlo al principio de los archivos de texto. Algunos desarrolladores de software lo han adoptado para otras codificaciones, incluyendo UTF-8, la cual no necesita una indicación de orden de byte. En este caso intenta marcar el archivo indicando que contiene texto Unicode. El punto código de la BOM, U+FEFF tiene la importante propiedad de la inambigüedad, sin importar la codificación Unicode utilizada. Las unidades FE
y FF
nunca aparecen en UTF-8; U+FFFE (el resultado del intercambio the U+FEFF) no es igual a un carácter válido, y U+FEFF transporta la longitud-cero o espacio sin roptura (un carácter sin apariencia y sin otro efecto más que prevenir la formación de ligaduras). El mismo carácter convertido a UTF-8 se convierte en la siguiente secuencia de bytes EF BB BF
.
En los códigos UTF-32 y UCS-4, un código de 32 bits funciona como una representación directa y confiable de cualquier punto de código de un carácter (aunque la endianness, que varia dependiendo de la arquitectura del procesador de cada computadora, afecta como se manifiesta el valor del código en su secuencia de bits). Aunque en otros casos, cada código puede ser representado por un código de valores de números variables.
UTF-16, mientras tanto, la cual normalmente asigna 16 bits por cada punto de código (la misma que UCS-2) aunque a veces asigna 32, es utilizada por muchas APIs (Interfaz de Programación de Aplicaciones por sus siglas en inglés). Mayormente por razones históricas que datan desde los días en que Unicode estaba basado en UCS-2 o era una interfaz con otras APIs que usaban UTF-16 . UTF-16 es el formato estándar para la API de Windows (aunque el soporte para sustitutos no está habilitado por omisión), para la de Java y la de ambientes .NET bytecode.
UCS-4 y UTF-32 no son comúnmente utilizados, ya que no más de 21 de los 32 bits asignados a cada punto de código serán alguna ves utilizados, lo que si se está volviendo común es la implementación del código UCS-4 en la programación para el almacenamiento interno del texto codificado.
GB18030 es otra forma de codificación para el Unicode, pero proveniente de la Administración para la Estandarización de China.
Otras codificaciones de caracteres populares
- ISO 646
- ASCII
- EBCDIC
- ISO 8859:
- ISO 8859-1, ISO 8859-2, ISO 8859-3, ISO 8859-4, ISO 8859-5, ISO 8859-6, ISO 8859-7, ISO 8859-8, ISO 8859-9, ISO 8859-10, ISO 8859-11, ISO 8859-13, ISO 8859-14, ISO 8859-15, ISO 8859-16
- CP437, CP737, CP850, CP852, CP855, CP857, CP858, CP860, CP861, CP863, CP865, CP866, CP869
- Juegos de caracteres de MS-Windows:
- Windows-1250 para idiomas de europa central que utilizan el alfabeto latino, (polaco, checo, eslovaco, húngaro, eslovenio, croata, rumano y albanés)
- Windows-1251 para alfabetos cirílicos
- Windows-1252 para idiomas occidentales
- Windows-1253 para griego
- Windows-1254 para turco
- Windows-1255 para hebreo
- Windows-1256 para árabe
- Windows-1257 para idomas bálticos
- Windows-1258 para vietnamita
- Mac OS Romano
- KOI8-R, KOI8-U, KOI7
- MIK
- Cork o T1
- ISCII
- VISCII
- Big5 (variante de Microsoft Code página 950)
- HKSCS
- Guobiao
- GB2312
- GBK (Microsoft Code página 936)
- GB18030
- Shift JIS para japonés (Microsoft Code página 932)
- EUC-KR para coreano (Microsoft Code página 949)
- ISO-2022 y EUC para juegos de caracteres CJK
- Unicode (incluyendo los subjuegos 16-bit)
- ANSEL o ISO/IEC 6937
Fuentes:
La mayoría de los texto fueron resumenes, traducciones o extracciones de la wikipedia en inglés y español http://wikipedia.org