'

Antes de explicar los tipos de datos para caracteres que ofrece el compilador Free Pascal, primero explicaré un poco sobre la codificación de caracteres. La codificación de caracteres son normas para relacionar un código con un determinado carácter, que pueden ser letras, símbolos, cifras o ideogramas de un sistema de escritura y caracteres de control (ejemplo, el carácter de control que indica a la impresora un salto de página). El código que se usa para relacionar un determinado carácter, puede ser una serie de impulsos eléctricos, un número u otro sistema de representación.

El ejemplo más antiguo de codificación de caracteres es el código Morse, que hace corresponder los caracteres con un código representado por puntos y rallas. Pero uno de los primeros sistemas de codificación de caracteres que usaron códigos digitales fue el BCDIC (Binary Coded Decimal Interchange Code ó Código de Intercambio decimal codificado en binario), en donde sus códigos usaban 6 dígitos binarios, es decir se podían representar un máximo de 64 caracteres (26=64). Conforme paso el tiempo se creó el código ASCII (American Standard Code for Information Interchange), que permitía usar códigos digitales con 7 dígitos binarios, es decir permitía representar un máximo de 128 caracteres (27=128).

Debido a que los códigos ASCII usan sólo 7 dígitos binarios, muchos fabricantes de computadoras, programas y países, extendieron la codificación a 8, 16 o más dígitos binarios; permitiendo cubrir símbolos específicos para otros idiomas como el japonés, hindú, el idioma chino, etc. Esta extensión creo muchas variantes de codificación de caracteres, ocasionando que algunas variantes representen por ejemplo la letra ñ con el número 164, y otros con el número 241, otros problemas que surgieron, fue que algunas codificaciones usaban una longitud variable de 8, 16 o más dígitos binarios para representar los caracteres, y algunas de ellos no tenían los 128 caracteres originales completos de los códigos ASCII. A continuación una tabla resumen con algunas de las codificaciones de caracteres más conocidas:

Codificación de caracteres conocidas.

Debido a la cantidad enorme de codificación de caracteres que se crearon, un grupo de fabricantes de computadoras y programas, universidades y profesionales, se decidieron por crear los códigos UNICODE. Unicode originalmente fue diseñado para usar un código digital de 16 dígitos binarios, pero actualmente fue extendido a 24 dígitos binarios para representar sólo caracteres desde 0 hasta 1 114 112. (Desde $000000 hasta $10FFFF en hexadecimal.). Estos códigos de 24 dígitos binarios se definen en Unicode como puntos de código. Los puntos de código de Unicode están divididos en 16 planos. Uno de ellos es el Plano 0, conocido como BMP (Basic Multilingual Plane) que se usa para representar 65536 caracteres, desde 0 hasta 65535 (16 dígitos binarios). Debido a que muchos sistemas informáticos no manejan la información en puntos de código de 24 dígitos binarios, Unicode define tres formas de codificación de caracteres UTF8, UTF16 yUTF32 en donde las siglas UTF significan "Unicode transformation format" que en español sería Formatos de Transformación Unicode.

Los sistemas operativos son los encargados de implementar y ofrecer una codificación de caracteres a usar por los programas. Actualmente la mayoría de los Sistemas Operativos ofrecen codificación de caracteres en Unicode. Usando las otras codificaciones de caracteres para compatibilidad con programas antiguos.

Es una codificación de caracteres de longitud variable para los puntos de código de 24 dígitos binarios de Unicode. Esta codificación de caracteres de longitud variable permite representar caracteres en una secuencia de 1 a 4 bytes. Una propiedad importante de la codificación es que los dígitos binarios iniciales de una secuencia de 1 a 4 bytes, determinan la longitud en bytes de la secuencia. Es decir si la secuencia empieza con el digito binario 0, entonces es de un byte; si la secuencia empieza con los dígitos binarios 110 entonces es de dos bytes; si la secuencia empieza con los dígitos binarios 1110 entonces es de 3 bytes; y por último si la secuencia empieza con los dígitos binarios 11110 entonces es de 4 bytes. Los bytes siguientes al primer byte de una secuencia mayor a 1 byte, siempre empiezan con los dígitos binarios 10.
La tabla a continuación, resume la forma de codificación del rango de los puntos de código desde $000000 hasta $10FFFF en hexadecimal. La letra x indica los dígitos binarios disponibles para codificar el punto de código de Unicode.

Codificacion de códigos UTF8

A continuación unos ejemplos de codificación:

Esta codificación de caracteres de longitud variable permite representar caracteres en una secuencia de 2 a 4 bytes. Cada punto de código entre $000000 y $00FFFF en hexadecimal se codifica, sin cambios, utilizando 2 bytes (16 dígitos binarios). Este rango se corresponde con el Plano 0 (BMP), por lo que la gran mayoría de los caracteres de uso común se codifican con 16 dígitos binarios. Para los códigos mayores a $00FFFF en hexadecimal se codifican en 4 bytes. A continuación una tabla, que resume la forma de codificación del rango de los puntos de código desde $000000 hasta $10FFFF:

Esta codificación es de longitud fija, permitiendo colocar todos los puntos de código sin necesidad de transformar o convertir. Su longitud es de 4 bytes (32 dígitos binarios).

Son una secuencia de códigos que nos permite identificar si un archivo de texto o flujo de caracteres esta codificado en UTF8, UTF16, o UTF32, la siguiente tabla describe su significado y su uso. El BOM siempre debe estar al inicio de un archivo de texto o flujo de caracteres.