String kódolása UTF-8-ba Java-ban

1. Áttekintés

Amikor foglalkozik Húrs Java-ban, néha egy adott karakterkészletbe kell kódolnunk őket.

Ez az oktatóanyag különböző módokat bemutató gyakorlati útmutató kódolni a Húr az UTF-8 karakterkészlethez; A technikai mélyebb merüléshez lásd a Karakterkódolás útmutatót.

2. A probléma meghatározása

A Java kódolás bemutatásához együttműködünk a németel Húr „Entwickeln Sie mit Vergnügen”.

String germanString = "Entwickeln Sie mit Vergnügen"; bájt [] germanBytes = germanString.getBytes (); String asciiEncodedString = új karakterlánc (germanBytes, StandardCharsets.US_ASCII); assertNotEquals (asciiEncodedString, germanString);

Ez Húr Az US_ASCII kódolással az „Entwickeln Sie mit Vergn? gen” értéket kapjuk nyomtatáskor, mert nem érti a nem ASCII ü karaktert. De amikor konvertálunk egy ASCII-kódolást Húr amely az összes angol karaktert használja az UTF-8-hoz, ugyanazt a karakterláncot kapjuk.

String englishString = "Örömmel fejlődj"; bájt [] angolByte = angolString.getBytes (); String asciiEncondedEnglishString = új karakterlánc (angolBytes, StandardCharsets.US_ASCII); assertEquals (asciiEncondedEnglishString, englishString);

Nézzük meg, mi történik, ha az UTF-8 kódolást használjuk.

3. Kódolás Core Java-val

Kezdjük a törzskönyvtárral.

Húrs megváltoztathatatlanok a Java-ban, ami azt jelenti, hogy nem tudjuk megváltoztatni a Húr karakterkódolás. Ahhoz, hogy elérjük, amit akarunk, át kell másolnunk a Húr majd hozzon létre egy újat a kívánt kódolással.

Először megkapjuk a Húr bájtokat, majd ezt követően hozzon létre egy újat a letöltött bájtok és a kívánt karakterkészlet segítségével:

String rawString = "Entwickeln Sie mit Vergnügen"; bájt [] bájt = rawString.getBytes (StandardCharsets.UTF_8); String utf8EncodedString = új karakterlánc (bájtok, StandardCharsets.UTF_8); assertEquals (rawString, utf8EncodedString);

4. Kódolás Java 7-vel StandardCharsets

Alternatív megoldásként használhatjuk a StandardCharsets osztály ben vezették beJava 7 kódolni a Húr.

Először dekódoljuk a Húr bájtokba, másodszor pedig kódolja a Húr UTF-8-ig:

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

5. Kódolás a Commons-Codec segítségével

Az alapvető Java használata mellett az Apache Commons Codec-et is használhatjuk ugyanezen eredmények elérésére.

Az Apache Commons Codec egy praktikus csomag, amely egyszerű kódolókat és dekódereket tartalmaz különböző formátumokra.

Először kezdjük a projekt konfigurációjával. A Maven használatakor hozzá kell adnunk a commons-kodek függőség a mi pom.xml:

 commons-kodek commons-kodek 1.14 

Akkor esetünkben a legérdekesebb osztály az StringUtils, amely módszereket kínál a kódoláshoz Húrs. Ennek az osztálynak a használatával kapunk egy UTF-8 kódolást Húr elég egyértelmű:

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

6. Következtetés

Kódolás a Húr az UTF-8-ba nem nehéz, de nem is olyan intuitív. Ez az oktatóanyag három megvalósítási módot mutat be, akár a Java Java, akár az Apache Commons Codec használatával.

Mint mindig, a kódminták megtalálhatók a GitHubon.