logo

Java-strengkodning

I Java, når vi beskæftiger os med Snor nogle gange er det nødvendigt at kode en streng i et bestemt tegnsæt. Indkodning er en måde at konvertere data fra et format til et andet. Strengobjekter bruger UTF-16-kodning. Problemet med UTF-16 er, at det ikke kan ændres. Der er kun én måde, der kan bruges til at få forskellig kodning, dvs. byte[] array. Måden at indkode på er ikke egnet, hvis vi får uventede data. I dette afsnit vil vi lære hvordan man koder en streng ind Java .

Bemærk: Det er ikke muligt at kode en streng i UTF-8. Så brug enten ByteBuffer eller kald et array på den for at få en byte[].

Før vi går videre i dette afsnit, skal vi forstå tegnkodning. Lad os tage et hurtigt kig. Lad os forstå hvorfor vi skal kode en streng .

Tegnkodning er en teknik til at konvertere tekstdata til binære tal. Vi kan tildele unikke numeriske værdier til specifikke tegn og konvertere disse tal til binært sprog. Disse binære tal kan senere konverteres tilbage til originale tegn baseret på deres værdier.

datastrukturer i java

Problem

Antag, at vi har tysk streng Farvel og det er påkrævet at kode det. Overvej følgende kodestykke:

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

Hvis vi koder strengen ved at bruge US_ASCII, giver den Farvel fordi US_ASCII-kodningen ikke forstår ikke-ASCII-tegnet ( u ). Når vi konverterer en ASCII-kodet streng til UTF-8, får vi den samme streng.

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

Hvis en byte[]-array indeholder ikke-Unicode-tekst, kan vi konvertere teksten til Unicode med Snor konstruktør. Omvendt kan vi også konvertere et String-objekt til et byte[]-array af ikke-Unicode-tegn med String.getBytes() metode. Lad os kode strengen ved at bruge getBytes() metode.

Bruger String.getBytes() metoden

Java Snor klasse giver den getBytes() metode der bruges til at kode s streng til UTF-8. Metoden konverterer strengen til en sekvens af bytes og gemmer resultatet i et array.

Syntaks:

 public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 

Den analyserer charsetName som en parameter og returnerer byte-arrayet. Det kaster UnsupportedEncodingException hvis det navngivne tegnsæt ikke understøttes.

Lad os skabe et Java-program, der konverterer en streng til 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 

Brug af StandardCharsets Class

Vi kan også bruge StandardCharset-klassen til at kode strengen. Der er to trin til at kode strengen. Først skal du afkode strengen til bytes og derefter indkode den i UTF-8. Overvej f.eks. følgende kode:

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

En anden måde at kode en streng på er at bruge Base64-kodningen. Vi vil diskutere Base64-kodning og afkodning i det kommende afsnit.