logo

Java-tekenreekscodering

Op Java, als we te maken hebben met Snaar soms is het nodig om een ​​string in een specifieke karakterset te coderen. Codering is een manier om gegevens van het ene formaat naar het andere te converteren. String-objecten gebruiken UTF-16-codering. Het probleem met UTF-16 is dat het niet kan worden gewijzigd. Er is maar één manier die kan worden gebruikt om verschillende codering te krijgen, namelijk byte[] array. De manier van coderen is niet geschikt als we onverwachte gegevens krijgen. In dit gedeelte zullen we leren hoe je een string codeert Java .

Let op: Het is niet mogelijk om een ​​string in UTF-8 te coderen. Gebruik dus ByteBuffer of roep er een array op aan om een ​​byte[] te krijgen.

Voordat we verder gaan in deze sectie, moeten we karaktercodering begrijpen. Laten we snel kijken. Laten we het begrijpen waarom we een string moeten coderen .

Tekencodering is een techniek om tekstgegevens om te zetten in binaire getallen. We kunnen unieke numerieke waarden toewijzen aan specifieke tekens en die getallen omzetten in binaire taal. Deze binaire getallen kunnen later op basis van hun waarden weer worden geconverteerd naar originele tekens.

Probleem

Stel dat we een Duitse string hebben Doei en het is vereist om het te coderen. Beschouw het volgende codefragment:

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

Als we de string coderen met behulp van de US_ASCII, geeft dit de Doei omdat de US_ASCII-codering het niet-ASCII-teken ( u ). Wanneer we een ASCII-gecodeerde string naar UTF-8 converteren, krijgen we dezelfde string.

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

Als een byte[] array niet-Unicode-tekst bevat, kunnen we de tekst naar Unicode converteren met Snaar bouwer. Omgekeerd kunnen we een String-object ook converteren naar een byte[]-array van niet-Unicode-tekens met de String.getBytes() methode. Laten we de string coderen met behulp van de getBytes() methode.

Met behulp van de String.getBytes()-methode

Java Snaar klas biedt de getBytes() methode die wordt gebruikt om de tekenreeks in UTF-8 te coderen. De methode converteert de string naar een reeks bytes en slaat het resultaat op in een array.

Syntaxis:

 public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 

Het parseert charsetName als een parameter en retourneert de byte-array. Het gooit de Niet-ondersteundeEncodingException als de genoemde tekenset niet wordt ondersteund.

Laten we een Java-programma maken dat een string omzet in UTF-8-codering.

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

Uitgang:

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

StandardCharsets-klasse gebruiken

We kunnen ook de klasse StandardCharset gebruiken om de tekenreeks te coderen. Er zijn twee stappen om de tekenreeks te coderen. Decodeer eerst de string in bytes en codeer deze vervolgens in UTF-8. Neem bijvoorbeeld de volgende code:

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

Een andere manier om een ​​string te coderen is door gebruik te maken van de Base64-codering. We zullen de Base64-codering en decodering in de volgende sectie bespreken.