Codieren Sie einen String in Java in UTF-8

1. Übersicht

Wenn wir mit Strings in Java arbeiten, müssen wir sie manchmal in einen bestimmten Zeichensatz codieren.

Dieses Tutorial ist eine praktische Anleitung, die verschiedene Möglichkeiten zum Codieren eines Strings in den UTF-8-Zeichensatz zeigt . Weitere technische Informationen finden Sie in unserem Leitfaden zur Zeichenkodierung.

2. Das Problem definieren

Um die Java-Codierung zu demonstrieren , arbeiten wir mit dem deutschen String „Entwickeln Sie mit behand“.

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

Dieser mit US_ASCII codierte String gibt beim Drucken den Wert "Entwickeln Sie mit Vergn? Gen" an, da er das Nicht-ASCII-Zeichen nicht versteht . Aber wenn wir einen ASCII-codierte konvertieren String , der alle englischen Zeichen in UTF-8 verwendet, so erhalten wir die gleiche Zeichenfolge.

String englishString = "Develop with pleasure"; byte[] englishBytes = englishString.getBytes(); String asciiEncondedEnglishString = new String(englishBytes, StandardCharsets.US_ASCII); assertEquals(asciiEncondedEnglishString, englishString);

Mal sehen, was passiert, wenn wir die UTF-8-Codierung verwenden.

3. Codierung mit Core Java

Beginnen wir mit der Kernbibliothek.

String s sind unveränderlich in Java, was bedeutet , dass wir keine ändern können String - Zeichencodierung. Um das zu erreichen, was wir wollen, müssen wir die Bytes des Strings kopieren und dann ein neues mit der gewünschten Codierung erstellen .

Zuerst erhalten wir die String- Bytes und erstellen danach ein neues mit den abgerufenen Bytes und dem gewünschten Zeichensatz:

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

4. Codierung mit Java 7 StandardCharsets

Alternativ können wir die in Java 7 eingeführte StandardCharsets- Klasse verwenden , um den String zu codieren .

Erstens dekodieren wir den String in Bytes und zweitens den String in 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. Codierung mit Commons-Codec

Neben der Verwendung von Kern-Java können wir alternativ den Apache Commons Codec verwenden, um dieselben Ergebnisse zu erzielen.

Apache Commons Codec ist ein praktisches Paket, das einfache Encoder und Decoder für verschiedene Formate enthält.

Beginnen wir zunächst mit der Projektkonfiguration. Wenn wir Maven verwenden, müssen wir die Commons-Codec- Abhängigkeit zu unserer pom.xml hinzufügen :

 commons-codec commons-codec 1.14 

Dann in unserem Fall die interessanteste Klasse ist StringUtils , die Methoden zu kodieren bietet String s. Mit dieser Klasse ist es ziemlich einfach , einen UTF-8-codierten String zu erhalten :

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

6. Fazit

Das Codieren eines Strings in UTF-8 ist nicht schwierig, aber nicht so intuitiv. In diesem Tutorial werden drei Möglichkeiten vorgestellt, entweder mit Kern-Java oder mit Apache Commons Codec.

Wie immer finden Sie die Codebeispiele auf GitHub.