logo

Java String Encoding

V Jave, keď sa zaoberáme Reťazec niekedy je potrebné zakódovať reťazec do špecifickej znakovej sady. Kódovanie je spôsob prevodu údajov z jedného formátu do druhého. Objekty typu String používajú kódovanie UTF-16. Problém s UTF-16 je, že sa nedá upraviť. Existuje iba jeden spôsob, ktorý možno použiť na získanie odlišného kódovania, t. j. poľa bajtov[]. Spôsob kódovania nie je vhodný, ak získame neočakávané dáta. V tejto časti sa naučíme ako zakódovať reťazec Java .

Poznámka: Nie je možné kódovať reťazec v UTF-8. Takže použite buď ByteBuffer alebo zavolajte pole, aby ste získali bajt[].

Predtým, ako sa pustíme do tejto časti, musíme porozumieť kódovaniu znakov. Poďme sa rýchlo pozrieť. Pochopme prečo potrebujeme kódovať reťazec .

Kódovanie znakov je technika prevodu textových údajov na binárne čísla. Špecifickým znakom môžeme priradiť jedinečné číselné hodnoty a tieto čísla previesť do binárneho jazyka. Tieto binárne čísla možno neskôr previesť späť na pôvodné znaky na základe ich hodnôt.

Problém

Predpokladajme, že máme nemecký reťazec Zbohom a je potrebné ho zakódovať. Zvážte nasledujúci útržok kódu:

spracovanie výnimiek v jazyku Java
 String str = 'Tsch�ss'; byte[] bytesOfString = str.getBytes(); String encoded_String = new String(bytesOfString, StandardCharsets.US_ASCII); assertNotEquals(encoded_String, str); 

Ak reťazec zakódujeme pomocou US_ASCII, dostane sa Zbohom pretože kódovanie US_ASCII nerozumie znaku, ktorý nie je ASCII ( u ). Keď skonvertujeme reťazec kódovaný ASCII na UTF-8, dostaneme rovnaký reťazec.

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

Ak pole byte[] obsahuje text, ktorý nie je Unicode, môžeme ho previesť na Unicode pomocou Reťazec konštruktér. Naopak, môžeme tiež previesť objekt String na pole bajtov[] znakov, ktoré nie sú Unicode pomocou String.getBytes() metóda. Poďme kódovať reťazec pomocou getBytes() metóda.

Použitie metódy String.getBytes().

Java Reťazec trieda poskytuje getBytes() metóda ktorý sa používa na zakódovanie reťazca do UTF-8. Metóda konvertuje reťazec na sekvenciu bajtov a výsledok uloží do poľa.

Syntax:

 public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 

Analyzuje charsetName ako parameter a vráti bajtové pole. To hádže UnsupportedEncodingException ak pomenovaná znaková sada nie je podporovaná.

Vytvorme program Java, ktorý prevedie reťazec do kódovania 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+' '); } } } 

Výkon:

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

Použitie triedy StandardCharsets

Na zakódovanie reťazca môžeme použiť aj triedu StandardCharset. Existujú dva kroky na zakódovanie reťazca. Najprv dekódujte reťazec na bajty a potom ho zakódujte do UTF-8. Zvážte napríklad nasledujúci kód:

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

Ďalším spôsobom, ako zakódovať reťazec, je použiť kódovanie Base64. V nasledujúcej časti budeme diskutovať o kódovaní a dekódovaní Base64.