logo

Java karakterlánc kódolás

Java nyelven, amikor azzal foglalkozunk Húr néha szükséges egy karakterlánc kódolása egy adott karakterkészletben. Kódolás az adatok egyik formátumból a másikba konvertálásának módja. A karakterlánc objektumok UTF-16 kódolást használnak. Az UTF-16 problémája az, hogy nem módosítható. Csak egy módja van annak, hogy különböző kódolást kapjunk, például byte[] tömböt. A kódolás módja nem megfelelő, ha váratlan adatokat kapunk. Ebben a részben megtanuljuk hogyan kell bekódolni egy karakterláncot Jáva .

Megjegyzés: UTF-8 formátumban nem lehet karakterláncot kódolni. Tehát használja a ByteBuffert, vagy hívjon meg egy tömböt a bájt[] megszerzéséhez.

Mielőtt továbblépnénk ebben a részben, meg kell értenünk a karakterkódolást. Nézzük gyorsan. Értsük meg miért kell egy karakterláncot kódolnunk .

különben ha java

Karakterkódolás egy technika a szöveges adatok bináris számokká alakítására. Adott karakterekhez egyedi numerikus értékeket rendelhetünk, és ezeket a számokat bináris nyelvre konvertálhatjuk. Ezeket a bináris számokat később vissza lehet alakítani eredeti karakterekké az értékeik alapján.

Probléma

Tegyük fel, hogy német húrunk van Viszlát és ennek kódolása kötelező. Vegye figyelembe a következő kódrészletet:

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

Ha a sztringet az US_ASCII használatával kódoljuk, akkor a Viszlát mert az US_ASCII kódolás nem érti a nem ASCII karaktert ( u ). Amikor egy ASCII kódolású karakterláncot UTF-8-ra konvertálunk, ugyanazt a karakterláncot kapjuk.

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

Ha egy byte[] tömb nem Unicode szöveget tartalmaz, akkor a szöveget Unicode-ba konvertálhatjuk a következővel Húr konstruktőr. Megfordítva, egy String objektumot is átalakíthatunk nem Unicode karakterekből álló byte[] tömbbé a String.getBytes() módszer. Kódoljuk a karakterláncot a getBytes() módszer.

A String.getBytes() metódus használata

Jáva Húr osztály biztosítja a getBytes() metódus amely az s karakterlánc UTF-8 kódolására szolgál. A metódus a karakterláncot bájtok sorozatává alakítja, és az eredményt egy tömbben tárolja.

Szintaxis:

java string részkarakterlánc
 public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 

Paraméterként elemzi a charsetName értéket, és visszaadja a bájttömböt. Ez dobja a UnsupportedEncodingException ha a megnevezett karakterkészlet nem támogatott.

összevonási rendezési algoritmus

Hozzunk létre egy Java programot, amely egy karakterláncot UTF-8 kódolásba konvertál.

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+' '); } } } 

Kimenet:

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

A StandardCharsets osztály használata

A karakterlánc kódolására a StandardCharset osztályt is használhatjuk. A karakterlánc kódolása két lépésből áll. Először dekódolja a karakterláncot bájtokká, majd kódolja UTF-8-ba. Vegyük például a következő kódot:

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

A karakterlánc kódolásának másik módja a Base64 kódolás használata. A Base64 kódolásáról és dekódolásáról a következő részben fogunk beszélni.