Ce face StandardCharsets
Calculatorul păstrează textul ca octeți. Codarea (charset) spune ce octeți corespund fiecărei litere. StandardCharsets are constante pentru codările care există garantat în orice Java: UTF_8, UTF_16, ISO_8859_1, US_ASCII.
StandardCharsets.UTF_8 poate reprezenta orice literă din lume și este codarea standard pe web și în Java 18+. În UTF-8, literele simple ocupă un octet, iar ă, â, î, ș, ț câte doi. Folosești constanta oriunde se cere o codare: text.getBytes(UTF_8), new String(octeti, UTF_8), Files.readString(cale, UTF_8).
Constanta este mai bună decât Charset.forName("UTF-8") sau textul "UTF-8": nu poate fi scrisă greșit și nu aruncă excepții. Dacă citești octeții cu altă codare decât cea folosită la scriere, diacriticele devin caractere ciudate.
Ce returnează
Constantele sunt obiecte Charset.
Exemple
Exemplul 1: Același text, număr diferit de octeți
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) {
String text = "Știință";
System.out.println("Caractere: " + text.length());
System.out.println("UTF-8: " + text.getBytes(StandardCharsets.UTF_8).length + " octeți");
System.out.println("UTF-16: " + text.getBytes(StandardCharsets.UTF_16).length + " octeți");
System.out.println("US-ASCII: " + new String(text.getBytes(StandardCharsets.US_ASCII), StandardCharsets.US_ASCII));
System.out.println(StandardCharsets.UTF_8.name());
}
}
Rezultat
Caractere: 7
UTF-8: 10 octeți
UTF-16: 16 octeți
US-ASCII: ?tiin??
UTF-8
Exemplul 2: Ce se întâmplă cu o codare greșită
Textul este scris în UTF-8, dar citit ca ISO-8859-1: fiecare literă cu diacritice devine două caractere ciudate.
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) {
byte[] octeti = "Pâine în Câmpina".getBytes(StandardCharsets.UTF_8);
System.out.println("Corect: " + new String(octeti, StandardCharsets.UTF_8));
System.out.println("Greșit: " + new String(octeti, StandardCharsets.ISO_8859_1));
}
}
Rezultat
Corect: Pâine în Câmpina
Greșit: Pâine în Câmpina
Greșeli frecvente
- Apelezi
getBytes()fără codare: pe sisteme vechi rezultatul depinde de setările calculatorului. - Scrii
"UTF8"sau"utf-8 "ca text: o greșeală de tastare aruncăUnsupportedCharsetExceptionabia la rulare. Constanta nu are această problemă. - Folosești
US_ASCIIpentru texte românești: diacriticele devin?.
Comenzi înrudite
Files.readString: Citește tot conținutul unui fișier text într-un singur String (implicit în UTF-8).InputStream: Clasa de bază pentru citirea de octeți (fișiere, rețea, System.in); readAllBytes citește tot conținutul într-un byte[].Base64: Transformă octeți în text sigur (litere, cifre, +, /) și înapoi; getEncoder codează, getDecoder decodează.HexFormat: Transformă octeți în text hexazecimal (00–ff) și înapoi; of creează formatatorul, formatHex face conversia.