logo

Codificação de string Java

Em Java, quando lidamos com Corda às vezes é necessário codificar uma string em um conjunto de caracteres específico. Codificação é uma forma de converter dados de um formato para outro. Objetos string usam codificação UTF-16. O problema com o UTF-16 é que ele não pode ser modificado. Existe apenas uma maneira que pode ser usada para obter codificações diferentes, ou seja, array de bytes []. A forma de codificação não é adequada se obtivermos dados inesperados. Nesta seção, aprenderemos como codificar uma string em Java .

Nota: Não é possível codificar uma string em UTF-8. Portanto, use ByteBuffer ou chame um array para obter um byte[].

Antes de prosseguir nesta seção, precisamos entender a codificação de caracteres. Vamos dar uma olhada rápida. Vamos entender por que precisamos codificar uma string .

Codificação de caracteres é uma técnica para converter dados de texto em números binários. Podemos atribuir valores numéricos exclusivos a caracteres específicos e converter esses números em linguagem binária. Posteriormente, esses números binários podem ser convertidos novamente em caracteres originais com base em seus valores.

Problema

Suponha que temos uma string alemã Tchau e é necessário codificá-lo. Considere o seguinte trecho de código:

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

Se codificarmos a string usando US_ASCII, ela fornecerá o Tchau porque a codificação US_ASCII não entende o caractere não ASCII ( você ). Quando convertemos uma string codificada em ASCII para UTF-8, obtemos a mesma string.

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

Se uma matriz byte[] contiver texto não Unicode, podemos converter o texto em Unicode com Corda construtor. Por outro lado, também podemos converter um objeto String em um array byte[] de caracteres não-Unicode com o String.getBytes() método. Vamos codificar a string usando o getBytes() método.

Usando o método String.getBytes()

Java Corda aula fornece o Método getBytes() que é usado para codificar a string em UTF-8. O método converte a string em uma sequência de bytes e armazena o resultado em um array.

Sintaxe:

 public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 

Ele analisa charsetName como um parâmetro e retorna a matriz de bytes. Ele joga o UnsupportedEncodingException se o conjunto de caracteres nomeado não for compatível.

Vamos criar um programa Java que converte uma string em codificação 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+' '); } } } 

Saída:

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

Usando a classe StandardCharsets

Também podemos usar a classe StandardCharset para codificar a string. Existem duas etapas para codificar a string. Primeiro, decodifique a string em bytes e depois codifique-a em UTF-8. Por exemplo, considere o seguinte 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); 

Outra forma de codificar uma string é usar a codificação Base64. Discutiremos a codificação e decodificação Base64 na próxima seção.