Java, kad mēs nodarbojamies ar Stīga dažreiz ir nepieciešams iekodēt virkni noteiktā rakstzīmju kopā. Kodēšana ir veids, kā konvertēt datus no viena formāta uz citu. Virknes objekti izmanto UTF-16 kodējumu. UTF-16 problēma ir tā, ka to nevar modificēt. Ir tikai viens veids, ko var izmantot, lai iegūtu atšķirīgu kodējumu, t.i., baitu [] masīvu. Kodēšanas veids nav piemērots, ja tiek iegūti negaidīti dati. Šajā sadaļā mēs uzzināsim kā iekodēt virkni Java .
Piezīme. Nav iespējams kodēt virkni UTF-8. Tātad, izmantojiet vai nu ByteBuffer, vai izsauciet tajā esošo masīvu, lai iegūtu baitu [].
Pirms turpināt šo sadaļu, mums ir jāsaprot rakstzīmju kodējums. Paskatīsimies ātri. Sapratīsim kāpēc mums ir jākodē virkne .
Rakstzīmju kodējums ir paņēmiens teksta datu pārvēršanai bināros skaitļos. Mēs varam piešķirt unikālas skaitliskās vērtības noteiktām rakstzīmēm un pārvērst šos skaitļus binārā valodā. Šos bināros skaitļus vēlāk var pārvērst atpakaļ sākotnējās rakstzīmēs, pamatojoties uz to vērtībām.
Problēma
Pieņemsim, ka mums ir vācu stīga Uz redzēšanos un tas ir jākodē. Apsveriet šādu koda fragmentu:
String str = 'Tsch�ss'; byte[] bytesOfString = str.getBytes(); String encoded_String = new String(bytesOfString, StandardCharsets.US_ASCII); assertNotEquals(encoded_String, str);
Ja mēs kodējam virkni, izmantojot US_ASCII, tas dod Uz redzēšanos jo US_ASCII kodējums nesaprot rakstzīmi, kas nav ASCII ( u ). Pārvēršot ASCII kodētu virkni uz UTF-8, mēs iegūstam to pašu virkni.
String str = 'GoodBye'; byte[] bytesOfString = str.getBytes(); String asciiEncondedEnglishString = new String(bytesOfString, StandardCharsets.US_ASCII); assertEquals(encoded_String, str);
Ja baitu [] masīvā ir teksts, kas nav unikoda teksts, mēs varam pārvērst tekstu par Unicode ar Stīga konstruktors. Un otrādi, mēs varam arī pārvērst virknes objektu baitu [] masīvā ar rakstzīmēm, kas nav Unikoda rakstzīmes, izmantojot String.getBytes() metodi. Kodēsim virkni, izmantojot getBytes() metodi.
Izmantojot String.getBytes() metodi
Java Stīga klasē nodrošina getBytes() metode kas tiek izmantots, lai kodētu s virkni UTF-8. Metode pārvērš virkni baitu secībā un saglabā rezultātu masīvā.
Sintakse:
public byte[] getBytes(String charsetName) throws UnsupportedEncodingException
Tas parsē charsetName kā parametru un atgriež baitu masīvu. Tas izmet UnsupportedEncodingException ja nosauktā rakstzīmju kopa netiek atbalstīta.
Izveidosim Java programmu, kas pārvērš virkni UTF-8 kodējumā.
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+' '); } } }
Izvade:
Encoded String: 71 111 111 103 108 101 32 67 108 111 117 100
Izmantojot StandardCharsets klasi
Mēs varam izmantot arī StandardCharset klasi, lai kodētu virkni. Virknes kodēšanai jāveic divas darbības. Vispirms atšifrējiet virkni baitos un pēc tam iekodējiet to UTF-8. Piemēram, apsveriet šādu kodu:
String str = ' Tsch�ss'; ByteBuffer buffer = StandardCharsets.UTF_8.encode(str); String encoded_String = StandardCharsets.UTF_8.decode(buffer).toString(); assertEquals(str, encoded_String);
Vēl viens veids, kā kodēt virkni, ir izmantot Base64 kodējumu. Nākamajā sadaļā mēs apspriedīsim Base64 kodējumu un dekodēšanu.