Kod en streng til UTF-8 i Java

1. Oversigt

Når man beskæftiger sig med Snors i Java, nogle gange er vi nødt til at kode dem i et specifikt tegnsæt.

Denne vejledning er en praktisk guide, der viser forskellige måder at kode en Snor til UTF-8-tegnsættet; for et mere teknisk dybdyk se vores guide til tegnkodning.

2. Definition af problemet

For at fremvise Java-kodningen arbejder vi med tyskeren Snor “Entwickeln Sie mit Vergnügen”.

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

Det her Snor kodet ved hjælp af US_ASCII giver os værdien "Entwickeln Sie mit Vergn? gen", når den udskrives, fordi det forstår ikke det ikke-ASCII ü karakter. Men når vi konverterer en ASCII-kodet Snor der bruger alle engelske tegn til UTF-8, får vi den samme streng.

String englishString = "Udvikl med glæde"; byte [] englishBytes = englishString.getBytes (); String asciiEncondedEnglishString = ny streng (englishBytes, StandardCharsets.US_ASCII); assertEquals (asciiEncondedEnglishString, englishString);

Lad os se, hvad der sker, når vi bruger UTF-8-kodning.

3. Kodning med Core Java

Lad os starte med kernebiblioteket.

Snors er uforanderlige i Java, hvilket betyder, at vi ikke kan ændre a Snor tegnkodning. For at opnå det, vi ønsker, vi er nødt til at kopiere bytes af Snor og opret derefter en ny med den ønskede kodning.

Først får vi Snor bytes og derefter oprette en ny ved hjælp af de hentede bytes og det ønskede tegnsæt:

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

4. Kodning med Java 7 Standardcharsæt

Alternativt kan vi bruge Standardcharsæt klasse introduceret iJava 7 at kode for Snor.

Først afkoder vi Snor i bytes og for det andet kode Snor 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. Kodning med Commons-Codec

Udover at bruge core Java kan vi alternativt bruge Apache Commons Codec til at opnå de samme resultater.

Apache Commons Codec er en praktisk pakke, der indeholder enkle kodere og dekodere til forskellige formater.

Lad os først starte med projektkonfigurationen. Når vi bruger Maven, skal vi tilføje commons-codec afhængighed af vores pom.xml:

 commons-codec commons-codec 1.14 

Så i vores tilfælde er den mest interessante klasse StringUtils, som giver metoder til at kode Snors. Brug af denne klasse til at få en UTF-8 kodet Snor er ret ligetil:

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

6. Konklusion

Kodning af en Snor ind i UTF-8 er ikke svært, men det er ikke så intuitivt. Denne vejledning præsenterer tre måder at gøre det på, enten ved hjælp af core Java eller Apache Commons Codec.

Som altid kan kodeeksemplerne findes på GitHub.