Kaip konvertuoti eilutes į UTF8 baitų masyvus ir iš jų "Java

"Java" programoje turiu eilutę ir noriu ją užkoduoti kaip baitų masyvą (UTF8 ar kita kodavimo forma). Arba turiu baitų masyvą (kokiu nors žinomu kodavimu) ir noriu jį konvertuoti į "Java" eilutę. Kaip atlikti šias konversijas?

Sprendimas

Konvertuokite iš eilutės į baitą[]:

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

Konvertuoti iš baito[] į eilutę:

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

Žinoma, turėtumėte naudoti teisingą kodavimo pavadinimą. Mano pavyzdžiuose buvo naudojami US-ASCII ir UTF-8 - du dažniausiai pasitaikantys kodai.

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

Galite konvertuoti tiesiogiai naudodami String(byte[], String) konstruktorių ir getBytes(String) metodą. "Java" pateikia galimus simbolių rinkinius per Charset klasę. JDK dokumentacijoje pateikiamas palaikomų kodų sąrašas.

90 % atvejų tokie konvertavimai atliekami srautams, todėl naudokite Reader/Writer klases. Negalima inkrementiniu būdu dekoduoti naudojant "String" metodus savavališkiems baitų srautams - paliksite save atvirą klaidoms, susijusioms su daugiabalyčiais simboliais.

Komentarai (3)