A Java, quan tractem Corda de vegades es requereix codificar una cadena en un conjunt de caràcters específic. Codificació és una manera de convertir dades d'un format a un altre. Els objectes de cadena utilitzen la codificació UTF-16. El problema amb UTF-16 és que no es pot modificar. Només hi ha una manera que es pot utilitzar per obtenir una codificació diferent, és a dir, la matriu de bytes[]. La forma de codificació no és adequada si obtenim dades inesperades. En aquest apartat, aprendrem com codificar una cadena Java .
Nota: no és possible codificar una cadena en UTF-8. Per tant, utilitzeu ByteBuffer o truqueu-hi una matriu per obtenir un byte[].
Abans d'avançar en aquesta secció, hem d'entendre la codificació de caràcters. Fem una ullada ràpida. Anem a entendre per què hem de codificar una cadena .
Codificació de caràcters és una tècnica per convertir dades de text en nombres binaris. Podem assignar valors numèrics únics a caràcters específics i convertir aquests nombres en llenguatge binari. Aquests nombres binaris posteriorment es poden tornar a convertir en caràcters originals en funció dels seus valors.
Problema
Suposem que tenim una cadena alemanya Adéu i és necessari per codificar-lo. Considereu el fragment de codi següent:
String str = 'Tsch�ss'; byte[] bytesOfString = str.getBytes(); String encoded_String = new String(bytesOfString, StandardCharsets.US_ASCII); assertNotEquals(encoded_String, str);
Si codifiquem la cadena utilitzant US_ASCII, dóna el Adéu perquè la codificació US_ASCII no entén el caràcter no ASCII ( u ). Quan convertim una cadena codificada ASCII a UTF-8, obtenim la mateixa cadena.
String str = 'GoodBye'; byte[] bytesOfString = str.getBytes(); String asciiEncondedEnglishString = new String(bytesOfString, StandardCharsets.US_ASCII); assertEquals(encoded_String, str);
Si una matriu de bytes[] conté text que no sigui Unicode, podem convertir el text a Unicode amb Corda constructor. Per contra, també podem convertir un objecte String en una matriu de bytes[] de caràcters no Unicode amb el String.getBytes() mètode. Anem a codificar la cadena utilitzant getBytes() mètode.
Utilitzant el mètode String.getBytes().
Java Corda classe proporciona el mètode getBytes(). que s'utilitza per codificar la cadena s en UTF-8. El mètode converteix la cadena en una seqüència de bytes i emmagatzema el resultat en una matriu.
Sintaxi:
public byte[] getBytes(String charsetName) throws UnsupportedEncodingException
Analitza charsetName com a paràmetre i retorna la matriu de bytes. Llança el UnsupportedEncodingException si el conjunt de caràcters anomenat no és compatible.
Creem un programa Java que converteixi una cadena en codificació UTF-8.
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+' '); } } }
Sortida:
Encoded String: 71 111 111 103 108 101 32 67 108 111 117 100
Utilitzant la classe StandardCharsets
També podem utilitzar la classe StandardCharset per codificar la cadena. Hi ha dos passos per codificar la cadena. Primer, descodifiqueu la cadena en bytes i després codifiqueu-la en UTF-8. Per exemple, considereu el codi següent:
String str = ' Tsch�ss'; ByteBuffer buffer = StandardCharsets.UTF_8.encode(str); String encoded_String = StandardCharsets.UTF_8.decode(buffer).toString(); assertEquals(str, encoded_String);
Una altra manera de codificar una cadena és utilitzar la codificació Base64. A la propera secció parlarem de la codificació i descodificació Base64.