logo

Codificarea șirurilor Java

În Java, când avem de-a face cu Şir uneori este necesară codificarea unui șir într-un anumit set de caractere. Codificare este o modalitate de a converti datele dintr-un format în altul. Obiectele șir folosesc codificarea UTF-16. Problema cu UTF-16 este că nu poate fi modificat. Există o singură modalitate care poate fi folosită pentru a obține o codificare diferită, adică matricea byte[]. Modul de codificare nu este potrivit dacă obținem date neașteptate. În această secțiune, vom învăța cum se codifică un șir în Java .

Notă: nu este posibilă codificarea unui șir în UTF-8. Deci, utilizați fie ByteBuffer, fie apelați o matrice pe el pentru a obține un octet[].

Înainte de a continua în această secțiune, trebuie să înțelegem codificarea caracterelor. Să aruncăm o privire rapidă. Să înțelegem de ce trebuie să codificăm un șir .

Codificarea caracterelor este o tehnică de conversie a datelor text în numere binare. Putem atribui valori numerice unice unor anumite caractere și să convertim acele numere în limbaj binar. Aceste numere binare mai târziu pot fi convertite înapoi în caractere originale pe baza valorilor lor.

cum se convertesc șirul în int java

Problemă

Să presupunem că avem șir german Pa și este necesar pentru a-l codifica. Luați în considerare următorul fragment de cod:

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

Dacă codificăm șirul utilizând US_ASCII, acesta dă Pa deoarece codificarea US_ASCII nu înțelege caracterul non-ASCII ( u ). Când convertim un șir codificat ASCII în UTF-8, obținem același șir.

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

Dacă o matrice byte[] conține text non-Unicode, putem converti textul în Unicode cu Şir constructor. În schimb, putem, de asemenea, converti un obiect String într-o matrice byte[] de caractere non-Unicode cu String.getBytes() metodă. Să codificăm șirul utilizând getBytes() metodă.

Folosind metoda String.getBytes().

Java Şir clasă oferă metoda getBytes(). care este folosit pentru a codifica șirul lui în UTF-8. Metoda convertește șirul într-o secvență de octeți și stochează rezultatul într-o matrice.

Sintaxă:

 public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 

Analizează charsetName ca parametru și returnează matricea de octeți. Aruncă UnsupportedEncodingException dacă setul de caractere numit nu este acceptat.

Să creăm un program Java care convertește un șir în codificare 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+' '); } } } 

Ieșire:

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

Utilizarea clasei StandardCharsets

De asemenea, putem folosi clasa StandardCharset pentru a codifica șirul. Există doi pași pentru a codifica șirul. Mai întâi, decodificați șirul în octeți și apoi codificați-l în UTF-8. De exemplu, luați în considerare următorul cod:

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

O altă modalitate de a codifica un șir este de a folosi codarea Base64. Vom discuta despre codificarea și decodificarea Base64 în secțiunea următoare.