Codeer een string naar UTF-8 in Java

1. Overzicht

Bij het omgaan met Draads in Java, soms moeten we ze coderen in een specifieke tekenset.

Deze tutorial is een praktische gids die verschillende manieren laat zien om een Draad naar de UTF-8 karakterset; Zie onze gids voor tekencodering voor een meer technische diepgang.

2. Het probleem definiëren

Om de Java-codering te demonstreren, werken we met het Duits Draad "Entwickeln Sie mit Vergnügen".

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

Dit Draad gecodeerd met US_ASCII geeft ons de waarde "Entwickeln Sie mit Vergn? gen" wanneer afgedrukt, omdat het begrijpt het niet-ASCII ü-teken niet. Maar wanneer we een ASCII-gecodeerd Draad die alle Engelse karakters gebruikt voor UTF-8, krijgen we dezelfde string.

String englishString = "Ontwikkel met plezier"; byte [] englishBytes = englishString.getBytes (); String asciiEncondedEnglishString = nieuwe String (englishBytes, StandardCharsets.US_ASCII); assertEquals (asciiEncondedEnglishString, englishString);

Laten we eens kijken wat er gebeurt als we de UTF-8-codering gebruiken.

3. Codering met Core Java

Laten we beginnen met de kernbibliotheek.

Draads zijn onveranderlijk in Java, wat betekent dat we een Draad tekencodering. Om te bereiken wat we willen, we moeten de bytes van de Draad en maak vervolgens een nieuwe met de gewenste codering.

Ten eerste krijgen we de Draad bytes en maak daarna een nieuwe met behulp van de opgehaalde bytes en de gewenste tekenset:

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

4. Codering met Java 7 StandardCharsets

Als alternatief kunnen we de StandardCharsets klasse geïntroduceerd inJava 7 om het Draad.

Eerst zullen we het Draad in bytes en, ten tweede, codeer het Draad aan UTF-8:

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

5. Codering met Commons-Codec

Naast het gebruik van core Java, kunnen we ook Apache Commons Codec gebruiken om dezelfde resultaten te bereiken.

Apache Commons Codec is een handig pakket met eenvoudige encoders en decoders voor verschillende formaten.

Laten we eerst beginnen met de projectconfiguratie. Bij gebruik van Maven moeten we de commons-codec afhankelijkheid van onze pom.xml:

 commons-codec commons-codec 1.14 

Dan is in ons geval de meest interessante les StringUtils, die methoden biedt om te coderen Draads. Met behulp van deze klasse wordt een UTF-8 gecodeerd Draad is vrij eenvoudig:

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

6. Conclusie

Codering van een Draad naar UTF-8 is niet moeilijk, maar het is niet zo intuïtief. Deze tutorial presenteert drie manieren om dit te doen, ofwel met behulp van core Java of met behulp van Apache Commons Codec.

Zoals altijd zijn de codevoorbeelden te vinden op GitHub.