Πώς να μετατρέψετε Strings σε και από UTF8 byte arrays σε Java

Στη Java, έχω ένα String και θέλω να το κωδικοποιήσω ως πίνακα byte (σε UTF8 ή κάποια άλλη κωδικοποίηση). Εναλλακτικά, έχω έναν πίνακα byte (σε κάποια γνωστή κωδικοποίηση) και θέλω να τον μετατρέψω σε συμβολοσειρά Java. Πώς μπορώ να κάνω αυτές τις μετατροπές;

Λύση

Μετατροπή από String σε byte[]:

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

Μετατροπή από byte[] σε String:

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

Θα πρέπει, φυσικά, να χρησιμοποιήσετε το σωστό όνομα κωδικοποίησης. Τα παραδείγματά μου χρησιμοποίησαν US-ASCII και UTF-8, τις δύο πιο κοινές κωδικοποιήσεις.

Σχόλια (10)
String original = "hello world";
byte[] utf8Bytes = original.getBytes("UTF-8");
Σχόλια (2)

Μπορείτε να μετατρέψετε απευθείας μέσω του κατασκευαστή String(byte[], String) και της μεθόδου getBytes(String). Η Java εκθέτει τα διαθέσιμα σύνολα χαρακτήρων μέσω της κλάσης Charset. Η τεκμηρίωση του JDK παραθέτει τους υποστηριζόμενους κωδικοποιητές.

Στο 90% των περιπτώσεων, τέτοιες μετατροπές πραγματοποιούνται σε ροές, οπότε θα χρησιμοποιούσατε τις κλάσεις Reader/Writer. Δεν θα αποκωδικοποιούσατε σταδιακά χρησιμοποιώντας τις μεθόδους String σε αυθαίρετες ροές byte - θα αφήνατε τον εαυτό σας ανοιχτό σε σφάλματα που αφορούν χαρακτήρες πολλαπλών byte.

Σχόλια (3)