logo

Java-strängkodning

I Java, när vi har att göra med Sträng ibland krävs det att en sträng kodas i en specifik teckenuppsättning. Kodning är ett sätt att konvertera data från ett format till ett annat. Strängobjekt använder UTF-16-kodning. Problemet med UTF-16 är att det inte går att modifiera. Det finns bara ett sätt som kan användas för att få annan kodning, dvs byte[]-array. Sättet att koda är inte lämpligt om vi får oväntade data. I det här avsnittet kommer vi att lära oss hur man kodar in en sträng Java .

Obs: Det är inte möjligt att koda en sträng i UTF-8. Så använd antingen ByteBuffer eller anrop en array på den för att få en byte[].

Innan vi går vidare i det här avsnittet måste vi förstå teckenkodning. Låt oss ta en snabb titt. Låt oss förstå varför vi behöver koda en sträng .

Teckenkodning är en teknik för att omvandla textdata till binära tal. Vi kan tilldela unika numeriska värden till specifika tecken och konvertera dessa siffror till binärt språk. Dessa binära tal kan senare konverteras tillbaka till ursprungliga tecken baserat på deras värden.

Problem

Antag att vi har tyska strängar Hejdå och det krävs för att koda det. Tänk på följande kodavsnitt:

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

Om vi ​​kodar strängen med hjälp av US_ASCII, ger den Hejdå eftersom US_ASCII-kodningen inte förstår icke-ASCII-tecknet ( u ). När vi konverterar en ASCII-kodad sträng till UTF-8 får vi samma sträng.

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

Om en byte[]-array innehåller icke-Unicode-text, kan vi konvertera texten till Unicode med Sträng konstruktör. Omvänt kan vi också konvertera ett String-objekt till en byte[]-array av icke-Unicode-tecken med String.getBytes() metod. Låt oss koda strängen genom att använda getBytes() metod.

Använder String.getBytes()-metoden

Java Sträng klass tillhandahåller getBytes() metod som används för att koda s-strängen till UTF-8. Metoden omvandlar strängen till en sekvens av byte och lagrar resultatet i en array.

Syntax:

 public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 

Den analyserar charsetName som en parameter och returnerar byte-arrayen. Det kastar UnsupportedEncodingException om den namngivna teckenuppsättningen inte stöds.

Låt oss skapa ett Java-program som konverterar en sträng till UTF-8-kodning.

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

Produktion:

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

Använder StandardCharsets Class

Vi kan också använda StandardCharset-klassen för att koda strängen. Det finns två steg för att koda strängen. Avkoda först strängen till byte och koda den sedan till UTF-8. Tänk till exempel på följande kod:

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

Ett annat sätt att koda en sträng är att använda Base64-kodningen. Vi kommer att diskutera Base64-kodningen och avkodningen i det kommande avsnittet.