Ako konvertovať reťazce do a z polí bytov UTF8 v jazyku Java

V Jave mám reťazec a chcem ho zakódovať ako pole bajtov (v UTF8 alebo inom kódovaní). Prípadne mám pole bajtov (v nejakom známom kódovaní) a chcem ho previesť na reťazec v Jave. Ako môžem tieto konverzie vykonať?

Riešenie

Prevod z reťazca na bajt[]:

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

Previesť z byte[] na String:

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

Samozrejme, mali by ste použiť správne kódovanie názvu. V mojich príkladoch som použil US-ASCII a UTF-8, dve najbežnejšie kódovania.

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

Konverziu môžete vykonať priamo pomocou konštruktora String(byte[], String) a metódy getBytes(String). Java zobrazuje dostupné znakové sady prostredníctvom triedy Charset. Dokumentácia JDK uvádza zoznam podporovaných kódovaní.

V 90 % prípadov sa takéto konverzie vykonávajú na prúdoch, takže by ste mali použiť triedy Reader/Writer. Metódy String by ste inkrementálne nedekódovali na ľubovoľných bajtových prúdoch - ponechali by ste sa otvorení chybám zahŕňajúcim viacbajtové znaky.

Komentáre (3)