Hoe Strings converteren naar en van UTF8 byte arrays in Java

In Java heb ik een String en ik wil die coderen als een byte array (in UTF8, of een andere codering). Of ik heb een byte array (in een bekende encoding) en ik wil die omzetten in een Java String. Hoe doe ik deze conversies?

Oplossing

Converteer van String naar byte[]:

String s = "some text here";
byte[] b = s.getBytes(StandardCharsets.UTF_8);

Converteer van byte[] naar String:

byte[] b = {(byte) 99, (byte)97, (byte)116};
String s = new String(b, StandardCharsets.US_ASCII);

U moet natuurlijk de juiste coderingsnaam gebruiken. Mijn voorbeelden gebruikten US-ASCII en UTF-8, de twee meest voorkomende coderingen.

Commentaren (10)
String original = "hello world";
byte[] utf8Bytes = original.getBytes("UTF-8");
Commentaren (2)

Je kunt direct converteren via de String(byte[], String) constructor en de getBytes(String) methode. Java stelt beschikbare tekensets beschikbaar via de klasse Charset. De JDK-documentatie geeft een lijst van ondersteunde coderingen.

90% van de tijd worden dergelijke conversies uitgevoerd op streams, dus je'zou de Reader/Writer klassen gebruiken. Je zou niet incrementeel decoderen met behulp van de String methoden op willekeurige byte streams - je zou jezelf open laten voor bugs met multibyte karakters.

Commentaren (3)