Zakódujte reťazec na UTF-8 v Jave

1. Prehľad

Pri jednaní s Strings v prostredí Java, niekedy ich musíme kódovať do konkrétnej znakovej sady.

Tento výukový program je praktickým sprievodcom ukazujúcim rôzne spôsoby kódovať a String na znakovú sadu UTF-8; podrobnejšie informácie nájdete v našom Sprievodcovi kódovaním znakov.

2. Definovanie problému

Aby sme predviedli kódovanie Java, budeme spolupracovať s nemčinou String „Entwickeln Sie mit Vergnügen“.

String germanString = "Entwickeln Sie mit Vergnügen"; byte [] germanBytes = germanString.getBytes (); String asciiEncodedString = nový String (germanBytes, StandardCharsets.US_ASCII); assertNotEquals (asciiEncodedString, germanString);

Toto String kódované pomocou US_ASCII nám po vytlačení dáva hodnotu „Entwickeln Sie mit Vergn? gen“, pretože nerozumie znaku, ktorý nie je ASCII ü. Ale keď prevádzame ASCII kódované String ktorý používa všetky anglické znaky na UTF-8, dostaneme rovnaký reťazec.

String englishString = "Rozvíjajte sa s radosťou"; byte [] englishBytes = englishString.getBytes (); Reťazec asciiEncondedEnglishString = nový Reťazec (englishBytes, StandardCharsets.US_ASCII); assertEquals (asciiEncondedEnglishString, englishString);

Pozrime sa, čo sa stane, keď použijeme kódovanie UTF-8.

3. Kódovanie pomocou jadra Java

Začnime s hlavnou knižnicou.

Strings sú nemenné v Jave, čo znamená, že nemôžeme zmeniť a String kódovanie znakov. Aby sme dosiahli to, čo chceme, musíme skopírovať bajty String a potom vytvorte nový s požadovaným kódovaním.

Najprv dostaneme String bajtov a potom vytvorte nový pomocou načítaných bajtov a požadovanej znakovej sady:

String rawString = "Entwickeln Sie mit Vergnügen"; byte [] bytes = rawString.getBytes (StandardCharsets.UTF_8); String utf8EncodedString = nový reťazec (bajty, StandardCharsets.UTF_8); assertEquals (rawString, utf8EncodedString);

4. Kódovanie pomocou Javy 7 ŠtandardnéCharzety

Prípadne môžeme použiť ŠtandardnéCharzety trieda predstavený vJava 7 na zakódovanie String.

Najskôr dekódujeme String do bajtov a po druhé kódovať String na UTF-8:

String rawString = "Entwickeln Sie mit Vergnügen"; ByteBuffer buffer = StandardCharsets.UTF_8.encode (rawString); String utf8EncodedString = StandardCharsets.UTF_8.decode (vyrovnávacia pamäť) .toString (); assertEquals (rawString, utf8EncodedString);

5. Kódovanie pomocou Commons-Codec

Okrem použitia jadra Java môžeme na dosiahnutie rovnakých výsledkov alternatívne použiť kodek Apache Commons.

Apache Commons Codec je praktický balík obsahujúci jednoduché kódovacie zariadenia a dekodéry pre rôzne formáty.

Najskôr začnime s konfiguráciou projektu. Pri použití Maven musíme pridať spoločný kodek závislosť na našom pom.xml:

 commons-codec commons-codec 1.14 

Potom je v našom prípade najzaujímavejšia trieda StringUtils, ktorá poskytuje metódy kódovania Strings. Pomocou tejto triedy sa získa kódovanie UTF-8 String je dosť priamy:

String rawString = "Entwickeln Sie mit Vergnügen"; byte [] bytes = StringUtils.getBytesUtf8 (rawString); String utf8EncodedString = StringUtils.newStringUtf8 (bajty); assertEquals (rawString, utf8EncodedString);

6. Záver

Kódovanie a String do UTF-8 nie je ťažké, ale nie je to také intuitívne. Tento výukový program predstavuje tri spôsoby, ako to urobiť, a to buď pomocou základnej verzie Java, alebo pomocou kodeku Apache Commons.

Ako vždy, vzorky kódu nájdete na GitHub.