Charset – El conjunto de caracteres de Java

En este tema vamos a estudiar el charset o conjunto de caracteres que pueden aparecer en un programa Java. Ya sabemos como crear un programa básico, ahora veremos los caracteres que podemos usar para construir programas más complejos.

Para escribir un programa en Java como en cualquier otro lenguaje de programación utilizamos caracteres. Como es lógico, hay una serie de restricciones y no podemos utilizar cualquier carácter que queramos a la hora de escribir un programa.

Cuando un programa trabaja con texto, necesita una forma de convertir los caracteres (letras, números, símbolos o incluso emojis) en valores que el ordenador pueda almacenar, enviar y procesar. Ese conjunto de reglas que define qué caracteres existen y cómo se representan internamente se llama charset, abreviación de character set o conjunto de caracteres.

Un charset establece dos cosas fundamentales:

  • El repertorio de caracteres disponibles (qué símbolos incluye).
  • La forma en que cada carácter se codifica en bytes para que el sistema pueda guardar o transmitir el texto.

Gracias a los charsets, Java puede interpretar correctamente los datos cuando lees un archivo, recibes información desde la red o generas texto en pantalla. Si el charset utilizado al leer no coincide con el que se usó al escribir, aparecerán errores como caracteres extraños o textos incompletos.

Código ASCII

En los inicios de la informática, el charset más utilizado fue el ASCII.

ASCII (American Standard Code for Information Interchange o Código Estándar Americano para el Intercambio de Información) asigna un valor numérico a cada letra, número, signo de puntuación y algunos otros caracteres especiales.

El código ASCII incluye 256 códigos divididos en dos grupos: ASCII estándar o básico y ASCII extendido, de 128 códigos cada uno.

ASCII básico

El conjunto ASCII básico o estándar utiliza 7 bits para cada código, lo que da como resultado 128 códigos desde 0 hasta 127.

charset java código ascii básico

En el conjunto de caracteres ASCII básico, los primeros 32 valores (Códigos del 0 al 31) son caracteres no imprimibles y están asignados a códigos de control. Por ejemplo, el código 13 corresponde a la tecla ENTER representada en la tabla por cr (CR por carriage return o “retorno de carro” término que provienen de las máquinas de escribir). También existen caracteres de control usados en teleprocesamiento como ACK (Acknowledge – aviso de mensaje recibido), BEL (bell – aviso por señal sonora), ETX (end of text – fin de texto), STX (start of text – comienzo de texto), etc.

Los 96 códigos restantes del código básico corresponden a los caracteres imprimibles y se asignan a los dígitos del 0 al 9, a las letras mayúsculas y minúsculas del alfabeto anglosajón, operadores aritméticos, etc.

ASCII extendido

El conjunto ASCII extendido utiliza 8 bits para cada código, dando como resultado 128 códigos adicionales, numerados desde el 128 hasta el 255.

charset java código ascii extendido

Los códigos correspondientes al ASCII extendido, del 128 al 255, se asignan a aquellos caracteres que no pertenecen al alfabeto anglosajón, por ejemplo, las vocales con tilde, la ñ y en general todos los caracteres especiales que utilizan los distintos lenguajes.

Código UNICODE

Debido a lo limitado de su tamaño, el código ASCII no es suficiente para representar caracteres de alfabetos como el Japonés, Chino o árabe. La solución a este problema ha sido crear un código más grande con el que poder representar cualquier carácter de cualquier idioma: el código UNICODE.

El código UNICODE proporciona una única representación numérica para cada símbolo, independientemente del ordenador, el programa o el lenguaje de programación que se use.

La codificación Unicode se ha transformado en un estándar adoptado por las principales empresas de hardware y software.

El código Unicode actualmente representa los caracteres de la mayoría de idiomas escritos en todo el mundo.

Unicode incluye:

  • alfabetos europeos,
  • cirílico, griego, árabe, chino, japonés, coreano,
  • símbolos matemáticos,
  • caracteres técnicos,
  • emojis,
  • y miles de caracteres más…

Los 127 primeros caracteres de Unicode corresponden al código ASCII estándar.

La descripción completa del estándar Unicode y las tablas de caracteres están disponibles en la página web oficial de Unicode.

Java soporta el sistema de codificación UNICODE y esto supone que el conjunto de caracteres del lenguaje sea muy amplio. ASCII es un subconjunto de UNICODE por lo tanto los caracteres ASCII siguen siendo válidos en Java.

Unicode no define por sí mismo cómo se guardan los caracteres, sino que funciona junto a diferentes esquemas de codificación. Los más usados en Java son:

  • UTF-8: compacto, compatible con ASCII y el más extendido en la actualidad.
  • UTF-16: usa unidades de 16 bits y es eficiente para idiomas asiáticos.

El conjunto de caracteres Java

Una vez visto lo anterior, los caracteres que pueden aparecer en un programa Java para formar las constantes, variables, expresiones, etc., son estos:

  • Las letras mayúsculas y minúsculas de la A(a) a la Z(z) de los alfabetos internacionales. Los caracteres ñ y Ñ son válidos así como las vocales acentuadas.
  • Dígitos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  • Los caracteres  ‘ _ ‘ ‘$’  así como cualquier carácter considerado como letra en el sistema de codificación Unicode.
  • Los operadores y caracteres especiales siguientes: + – * / = % & # ! ? ^ “ ‘ ~ \ | < > ( ) [ ] { } :: ; . , … @
  • Separadores:  espacio, tabulador y salto de línea
  • Secuencias de escape. Por ejemplo \t,  \n. Se explican en el siguiente tema

Los separadores como el tabulador y el salto de línea ayudan a que el programa sea más legible por las personas.

Por ejemplo, podemos escribir el método main sin utilizar espacios en blanco, de esta forma:

public static void main(String [] args){System.out.println("Hola Mundo!!!");}

Aunque queda mucho más claro si introducimos separadores como los tabuladores y saltos de línea:

public static void main(String [] args){
       System.out.println("Hola Mundo!!!");
}

Deja un comentario

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

Scroll al inicio