I Java, når vi har å gjøre med String noen ganger er det nødvendig å kode en streng i et spesifikt tegnsett. Koding er en måte å konvertere data fra ett format til et annet. Strengobjekter bruker UTF-16-koding. Problemet med UTF-16 er at det ikke kan endres. Det er bare én måte som kan brukes til å få forskjellig koding, dvs. byte[]-array. Måten å kode på er ikke egnet hvis vi får uventede data. I denne delen vil vi lære hvordan koder du inn en streng Java .
Merk: Det er ikke mulig å kode en streng i UTF-8. Så bruk enten ByteBuffer eller ring en matrise på den for å få en byte[].
Før vi går videre i denne delen, må vi forstå tegnkoding. La oss ta en rask titt. La oss forstå hvorfor vi trenger å kode en streng .
Tegnkoding er en teknikk for å konvertere tekstdata til binære tall. Vi kan tilordne unike numeriske verdier til spesifikke tegn og konvertere disse tallene til binærspråk. Disse binære tallene kan senere konverteres tilbake til originale tegn basert på verdiene deres.
int i streng
Problem
Anta at vi har tysk streng Ha det og det er nødvendig å kode den. Tenk på følgende kodebit:
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 å bruke US_ASCII, gir den Ha det fordi US_ASCII-kodingen ikke forstår ikke-ASCII-tegnet ( u ). Når vi konverterer en ASCII-kodet streng til UTF-8, får vi den samme strengen.
String str = 'GoodBye'; byte[] bytesOfString = str.getBytes(); String asciiEncondedEnglishString = new String(bytesOfString, StandardCharsets.US_ASCII); assertEquals(encoded_String, str);
Hvis en byte[]-matrise inneholder ikke-Unicode-tekst, kan vi konvertere teksten til Unicode med String konstruktør. Omvendt kan vi også konvertere et String-objekt til en byte[]-array med ikke-Unicode-tegn med String.getBytes() metode. La oss kode strengen ved å bruke getBytes() metode.
Bruker String.getBytes()-metoden
Java String klasse gir getBytes()-metoden som brukes til å kode s-strengen til UTF-8. Metoden konverterer strengen til en sekvens av byte og lagrer resultatet i en matrise.
Syntaks:
public byte[] getBytes(String charsetName) throws UnsupportedEncodingException
Den analyserer charsetName som en parameter og returnerer byte-matrisen. Den kaster UnsupportedEncodingException hvis det navngitte tegnsettet ikke støttes.
La oss lage et Java-program som konverterer en streng til UTF-8-koding.
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+' '); } } }
Produksjon:
Encoded String: 71 111 111 103 108 101 32 67 108 111 117 100
Bruker StandardCharsets Class
Vi kan også bruke StandardCharset-klassen for å kode strengen. Det er to trinn for å kode strengen. Først må du dekode strengen til byte og deretter kode den inn i UTF-8. Tenk for eksempel på følgende kode:
streng en int
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 annen måte å kode en streng på er å bruke Base64-kodingen. Vi vil diskutere Base64-koding og dekoding i den kommende delen.