logo

Java eilučių kodavimas

Java, kai mes susiduriame su Styga kartais reikia užkoduoti eilutę konkrečiame simbolių rinkinyje. Kodavimas yra būdas konvertuoti duomenis iš vieno formato į kitą. Styginių objektai naudoja UTF-16 kodavimą. UTF-16 problema yra ta, kad jo negalima modifikuoti. Yra tik vienas būdas, kuriuo galima gauti skirtingą kodavimą, ty baitų [] masyvą. Kodavimo būdas netinka, jei gauname netikėtų duomenų. Šiame skyriuje mes išmoksime kaip užkoduoti eilutę Java .

Pastaba: UTF-8 eilutės koduoti neįmanoma. Taigi, naudokite ByteBuffer arba iškvieskite jame esantį masyvą, kad gautumėte baitą [].

Prieš pereidami prie šio skyriaus, turime suprasti simbolių kodavimą. Greitai pažiūrėkime. Supraskime kodėl mums reikia užkoduoti eilutę .

Simbolių kodavimas yra technika, skirta konvertuoti tekstinius duomenis į dvejetainius skaičius. Mes galime priskirti unikalias skaitines reikšmes konkretiems simboliams ir konvertuoti tuos skaičius į dvejetainę kalbą. Šie dvejetainiai skaičiai vėliau gali būti konvertuojami atgal į pradinius simbolius pagal jų reikšmes.

Problema

Tarkime, turime vokišką stygą Ate ir būtina jį užkoduoti. Apsvarstykite šį kodo fragmentą:

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

Jei koduojame eilutę naudodami US_ASCII, tai suteikia Ate nes US_ASCII koduotė nesupranta ne ASCII simbolio ( u ). Kai konvertuojame ASCII koduotą eilutę į UTF-8, gauname tą pačią eilutę.

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

Jei baitų [] masyve yra ne Unicode teksto, galime konvertuoti tekstą į Unicode su Styga konstruktorius. Ir atvirkščiai, mes taip pat galime konvertuoti String objektą į baitų [] ne Unikodo simbolių masyvą su String.getBytes() metodas. Užkoduokime eilutę naudodami getBytes () metodas.

Naudojant String.getBytes() metodą

Java Styga klasė suteikia getBytes() metodas kuri naudojama s eilutei koduoti į UTF-8. Metodas konvertuoja eilutę į baitų seką ir išsaugo rezultatą į masyvą.

Sintaksė:

 public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 

Jis analizuoja charsetName kaip parametrą ir grąžina baitų masyvą. Tai išmeta Nepalaikoma kodavimo išimtis jei pavadintas simbolių rinkinys nepalaikomas.

Sukurkime Java programą, kuri konvertuoja eilutę į UTF-8 koduotę.

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

Išvestis:

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

Naudojant „StandardCharsets“ klasę

Taip pat eilutei koduoti galime naudoti klasę StandardCharset. Yra du žingsniai koduoti eilutę. Pirmiausia iškoduokite eilutę į baitus, o tada užkoduokite į UTF-8. Pavyzdžiui, apsvarstykite šį 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); 

Kitas būdas koduoti eilutę yra naudoti Base64 kodavimą. Kitame skyriuje aptarsime „Base64“ kodavimą ir dekodavimą.