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.