Tavutaulukon muuntamista merkkijonoksi kutsutaan dekoodaukseksi. Tämä prosessi vaatii Charsetin. Meidän pitäisi kuitenkin käyttää merkkisarjaa dekoodaus tavutaulukko.
On kaksi tapaa muuntaa tavutaulukko merkkijonoksi:
- Käyttämällä Merkkijonoluokan rakentaja
- Käyttämällä UTF-8-koodaus
Käyttämällä String Class Constructoria
Yksinkertaisin tapa muuntaa tavutaulukko Stringiksi, voimme käyttää String-luokan konstruktoria, jonka konstruktoriargumenttina on byte[].
String str=new String(bytes);
Esimerkki
Seuraava esimerkki ei käytä mitään merkkikoodausta.
public class ByteArraytoStringExample { public static void main(String args[]) { try { byte[] bytes = 'hello world'.getBytes(); //creates a string from the byte array without specifying character encoding String s = new String(bytes); System.out.println(s); } catch(Exception e) { e.printStackTrace(); } } }
Lähtö:
Käyttämällä UTF-8-koodausta
Muista merkkikoodaus, kun muunnat tavutaulukon merkkijonoksi. Koska tavut ovat binääritietoja, kun taas merkkijono on merkkitietoja. On tärkeää tietää sen tekstin alkuperäinen koodaus, josta tavutaulukko on luotu. Kun käytämme eri merkkikoodausta, emme saa alkuperäistä merkkijonoa takaisin.
Oletetaan, että meidän on luettava tavutaulukko tiedostosta, joka on koodattu ' ISO_8859_1 '. Meillä ei ole merkkikoodausta, kun muunnamme tavutaulukon merkkijonoksi. Muunnamme tavutaulukon Stringiksi käyttämällä String-luokan konstruktoria, mutta se ei takaa, että saamme saman tekstin takaisin. Tämä johtuu siitä, että String-luokan rakentaja käyttää alustan oletuskoodausta.
Bytes sisältää 8 bittiä, joilla voi olla jopa 256 erillistä arvoa. Se toimii ASCII-merkistössä, jossa käytetään vain seitsemää bittiä. Jos merkistöissä on enemmän kuin 256 arvoa, meidän tulee erikseen määrittää koodaus, joka kertoo kuinka merkit koodataan tavujonoksi.
Java-alustan tukemat merkit ovat seuraavat:
- StandardCharsets.ISO_8859_1
- StandardCharsets.US_ASCII
- StandardCharsets.UTF_16
- StandardCharsets.UTF_16BE
- StandardCharsets.UTF_16LE
Kun emme muista tarkkaa koodausta, tällaisissa tapauksissa alustamme ei pysty muuttamaan näitä erikoismerkkejä oikein. Tämä ongelma ratkaistaan tarjoamalla UTF-8 ' merkkikoodauksena. Java tarjoaa toisen ylikuormitetun rakentajan String-luokassa, joka hyväksyy merkkikoodauksen.
new String(byte[], 'character encoding');
Esimerkki
Seuraavassa esimerkissä olemme käyttäneet StandardCharset.UTF_8 määrittääksesi koodauksen.
import java.io.IOException; import java.nio.charset.StandardCharsets; public class ByteArraytoStringExample1 { public static void main(String[] args) { try { byte[] b = 'Morning'.getBytes(StandardCharsets.UTF_8); //byte array String string = new String(b, StandardCharsets.UTF_8); //string with 'UTF-8' encoding System.out.println(string); } catch(Exception e) { e.printStackTrace(); } } }
Lähtö:
Esimerkki
Seuraavassa esimerkissä olemme ottaneet charin luodessasi tavutaulukkoa. Se toimii autoboxingin takia. Merkki 'T' muunnetaan 84:ksi tavutaulukossa ja niin edelleen. Siksi molempien tavutaulukoiden tulos on sama.
public class ByteArraytoStringExample2 { public static void main(String[] args) { byte[] byteArray = { 'T', 'E', 'C', 'H', 'N', 'O','L','O','G','Y'}; //byte array of characters byte[] byteArray1 = { 84, 69, 67, 72, 78, 79, 76, 79, 71, 89}; //array of ASCII values String s = new String(byteArray); //converts byteArray to String String str = new String(byteArray1); System.out.println(s); System.out.println(str); } }
Lähtö:
String-luokassa on myös konstruktori, jossa voimme välittää argumenttina tavutaulukon ja Charsetin. Joten seuraavaa lausetta voidaan käyttää myös tavutaulukon muuntamiseen Stringiksi Javassa.
String str = new String(byteArray, StandardCharsets.UTF_8)
String-luokassa on myös konstruktori, joka muuntaa tavutaulukon osajoukon merkkijonoksi.
String(byte[] bytes, int offset, int length, String charsetName)
Katsotaanpa toinen esimerkki, jossa käytetään erilaista koodausta.
Esimerkki
import java.io.UnsupportedEncodingException; public class ByteArraytoStringExample3 { public static void main(String args[]) { try { byte[] bytes = new byte[] { 75, 69, 82, 115, 121, 90, 43, 98, -30}; //bytes in ASCII code String utf = new String(bytes, 'UTF-8'); //converts into UTF-8 encoding String cp1252 = new String(bytes, 'Cp1252'); //conversts into Cp1252 endcoding //converts into windows-1252 encoding String windows1252 = new String(bytes, 'Windows-1252'); System.out.println('String in UTF-8 encoding : ' + utf); System.out.println('String in Cp1252 encoding : ' + cp1252); System.out.println('string Windows-1252 encoding : ' + windows1252); } catch(Exception e) { e.printStackTrace(); } } }
Lähtö: