logo

Codificación de cadenas Java

En Java, cuando tratamos con Cadena a veces es necesario codificar una cadena en un conjunto de caracteres específico. Codificación es una forma de convertir datos de un formato a otro. Los objetos de cadena utilizan codificación UTF-16. El problema con UTF-16 es que no se puede modificar. Solo hay una forma que se puede utilizar para obtener una codificación diferente, es decir, una matriz de bytes []. La forma de codificación no es adecuada si obtenemos datos inesperados. En esta sección aprenderemos cómo codificar una cadena en Java .

Nota: No es posible codificar una cadena en UTF-8. Entonces, use ByteBuffer o llame a una matriz para obtener un byte [].

Antes de continuar con esta sección, debemos comprender la codificación de caracteres. Echemos un vistazo rápido. entendamos por qué necesitamos codificar una cadena .

Codificación de caracteres es una técnica para convertir datos de texto en números binarios. Podemos asignar valores numéricos únicos a caracteres específicos y convertir esos números al lenguaje binario. Estos números binarios se pueden convertir posteriormente a caracteres originales en función de sus valores.

Problema

Supongamos que tenemos una cadena alemana. Adiós y es necesario codificarlo. Considere el siguiente fragmento de código:

 String str = 'Tsch�ss'; byte[] bytesOfString = str.getBytes(); String encoded_String = new String(bytesOfString, StandardCharsets.US_ASCII); assertNotEquals(encoded_String, str); 

Si codificamos la cadena usando US_ASCII, nos da el Adiós porque la codificación US_ASCII no comprende el carácter que no es ASCII ( tu ). Cuando convertimos una cadena codificada en ASCII a UTF-8, obtenemos la misma cadena.

 String str = 'GoodBye'; byte[] bytesOfString = str.getBytes(); String asciiEncondedEnglishString = new String(bytesOfString, StandardCharsets.US_ASCII); assertEquals(encoded_String, str); 

Si una matriz de bytes [] contiene texto que no es Unicode, podemos convertir el texto a Unicode con Cadena constructor. Por el contrario, también podemos convertir un objeto String en una matriz de bytes[] de caracteres no Unicode con la Cadena.getBytes() método. Codifiquemos la cadena usando el obtenerBytes() método.

Usando el método String.getBytes()

Java Cadena clase proporciona el método getBytes() que se utiliza para codificar una cadena en UTF-8. El método convierte la cadena en una secuencia de bytes y almacena el resultado en una matriz.

Sintaxis:

 public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 

Analiza charsetName como parámetro y devuelve la matriz de bytes. arroja el Excepción de codificación no admitida si el juego de caracteres nombrado no es compatible.

Creemos un programa Java que convierta una cadena a codificación UTF-8.

StringEncodingExample.java

 public class StringEncodingExample { public static void main(String args[]) throws Exception { //string to encode String str = 'Google Cloud'; //invokes the getBytes() method and stores an array of bytes into array[] byte array[] = str.getBytes('UTF8'); System.out.println('Encoded String: '); //enhanced for loop that iterates over the array for (byte x: array) { //prints the sequence of bytes System.out.print(x+' '); } } } 

Producción:

 Encoded String: 71 111 111 103 108 101 32 67 108 111 117 100 

Usando la clase StandardCharsets

También podemos usar la clase StandardCharset para codificar la cadena. Hay dos pasos para codificar la cadena. Primero, decodifique la cadena en bytes y luego codifíquela en UTF-8. Por ejemplo, considere el siguiente código:

 String str = ' Tsch�ss'; ByteBuffer buffer = StandardCharsets.UTF_8.encode(str); String encoded_String = StandardCharsets.UTF_8.decode(buffer).toString(); assertEquals(str, encoded_String); 

Otra forma de codificar una cadena es utilizar la codificación Base64. Discutiremos la codificación y decodificación Base64 en la siguiente sección.