Kodirajte niz u UTF-8 na Javi

1. Pregled

Kad se ima posla s Nizs u Javi, ponekad ih moramo kodirati u određeni skup znakova.

Ovaj je vodič praktični vodič koji prikazuje različite načine za kodiranje a Niz na UTF-8 skup znakova; za tehničko dublje ronjenje pogledajte naš Vodič za kodiranje znakova.

2. Definiranje problema

Da bismo prikazali Java kodiranje, radit ćemo s njemačkim jezikom Niz “Entwickeln Sie mit Vergnügen”.

Niz germanString = "Entwickeln Sie mit Vergnügen"; bajt [] germanBytes = germanString.getBytes (); Niz asciiEncodedString = novi niz (germanBytes, StandardCharsets.US_ASCII); assertNotEquals (asciiEncodedString, germanString);

Ovaj Niz kodirano pomoću US_ASCII daje nam vrijednost "Entwickeln Sie mit Vergn? gen" kada se ispisuje, jer ne razumije znak koji nije ASCII ü. Ali kada pretvorimo ASCII kodirano Niz koji koristi sve engleske znakove za UTF-8, dobit ćemo isti niz.

String englishString = "Razvijajte sa zadovoljstvom"; bajt [] englishBytes = englishString.getBytes (); String asciiEncondedEnglishString = novi niz (englishBytes, StandardCharsets.US_ASCII); assertEquals (asciiEncondedEnglishString, englishString);

Pogledajmo što se događa kada koristimo UTF-8 kodiranje.

3. Kodiranje s jezgrom Java

Počnimo s osnovnom knjižnicom.

Nizs su nepromjenjivi u Javi, što znači da ne možemo promijeniti a Niz kodiranje znakova. Da bismo postigli ono što želimo, moramo kopirati bajtove Niz a zatim stvorite novi sa željenim kodiranjem.

Prvo, dobivamo Niz bajtova i nakon toga stvorite novi pomoću preuzetih bajtova i željenog znaka:

String rawString = "Entwickeln Sie mit Vergnügen"; bajt [] bajtova = rawString.getBytes (StandardCharsets.UTF_8); String utf8EncodedString = novi niz (bajtovi, StandardCharsets.UTF_8); assertEquals (rawString, utf8EncodedString);

4. Kodiranje s Javom 7 StandardCharsets

Alternativno, možemo koristiti StandardCharsets razred uveden uJava 7 za kodiranje Niz.

Prvo ćemo dekodirati Niz u bajtove i, drugo, kodirajte Niz prema UTF-8:

String rawString = "Entwickeln Sie mit Vergnügen"; ByteBuffer međuspremnik = StandardCharsets.UTF_8.encode (rawString); String utf8EncodedString = StandardCharsets.UTF_8.decode (međuspremnik) .toString (); assertEquals (rawString, utf8EncodedString);

5. Kodiranje s Commons-Codec

Osim korištenja jezgre Java, alternativno možemo koristiti Apache Commons Codec za postizanje istih rezultata.

Apache Commons Codec praktičan je paket koji sadrži jednostavne kodere i dekodere za razne formate.

Prvo, krenimo s konfiguracijom projekta. Kada koristimo Maven, moramo dodati zajednički kodek ovisnost o našoj pom.xml:

 commons-codec commons-codec 1.14 

Tada je u našem slučaju najzanimljiviji čas StringUtils, koji pruža metode za kodiranje Nizs. Koristeći ovu klasu, dobivanje UTF-8 kodiranog Niz je prilično jednostavno:

String rawString = "Entwickeln Sie mit Vergnügen"; bajt [] bajtova = StringUtils.getBytesUtf8 (rawString); String utf8EncodedString = StringUtils.newStringUtf8 (bajtovi); assertEquals (rawString, utf8EncodedString);

6. Zaključak

Kodiranje a Niz UTF-8 nije teško, ali nije ni toliko intuitivno. Ovaj tutorial predstavlja tri načina za to, ili pomoću jezgre Java ili koristeći Apache Commons Codec.

Kao i uvijek, uzorci koda mogu se naći na GitHubu.