Kod en streng til UTF-8 i Java

1. Oversikt

Når du arbeider med Strings i Java, noen ganger må vi kode dem inn i et bestemt tegnsett.

Denne opplæringen er en praktisk guide som viser forskjellige måter å kode en String til UTF-8-settet; for en mer teknisk dypdykking, se vår guide til tegnkoding.

2. Definere problemet

For å vise frem Java-kodingen, jobber vi med tyskeren String “Entwickeln Sie mit Vergnügen”.

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

Dette String kodet med US_ASCII gir oss verdien “Entwickeln Sie mit Vergn? gen” når den skrives ut, fordi den forstår ikke tegnet som ikke er ASCII ü. Men når vi konverterer en ASCII-kodet String som bruker alle engelske tegn til UTF-8, får vi samme streng.

String englishString = "Utvikle med glede"; byte [] englishBytes = englishString.getBytes (); Streng asciiEncondedEnglishString = ny streng (englishBytes, StandardCharsets.US_ASCII); assertEquals (asciiEncondedEnglishString, englishString);

La oss se hva som skjer når vi bruker UTF-8-kodingen.

3. Koding med Core Java

La oss starte med kjernebiblioteket.

Strings er uforanderlige i Java, noe som betyr at vi ikke kan endre a String tegnkoding. For å oppnå det vi ønsker, vi må kopiere byte til String og opprett en ny med ønsket koding.

Først får vi String byte og deretter lage en ny ved hjelp av hentede byte og ønsket tegnsett:

String rawString = "Entwickeln Sie mit Vergnügen"; byte [] bytes = rawString.getBytes (StandardCharsets.UTF_8); Streng utf8EncodedString = ny streng (byte, StandardCharsets.UTF_8); assertEquals (rawString, utf8EncodedString);

4. Koding med Java 7 StandardCharsets

Alternativt kan vi bruke StandardCharsets klasse introdusert iJava 7 å kode String.

Først dekoder vi String inn i byte og for det andre koden String til UTF-8:

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

5. Koding med Commons-Codec

Foruten å bruke kjernen Java, kan vi alternativt bruke Apache Commons Codec for å oppnå de samme resultatene.

Apache Commons Codec er en hendig pakke som inneholder enkle kodere og dekodere for forskjellige formater.

Først, la oss starte med prosjektkonfigurasjonen. Når vi bruker Maven, må vi legge til commons-codec avhengighet til vår pom.xml:

 commons-codec commons-codec 1.14 

Så, i vårt tilfelle, er den mest interessante klassen StringUtils, som gir metoder for å kode Strings. Ved å bruke denne klassen får du en UTF-8 kodet String er ganske grei:

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

6. Konklusjon

Koding av en String inn i UTF-8 er ikke vanskelig, men det er ikke så intuitivt. Denne opplæringen presenterer tre måter å gjøre det på, enten ved hjelp av Java-kjerne eller ved hjelp av Apache Commons Codec.

Som alltid kan kodeeksemplene bli funnet på GitHub.