Modifica della codifica predefinita per String(byte[])
Domanda
C'è un modo per modificare la codifica utilizzata dal costruttore String(byte[])?
Nel mio codice utilizzo String(byte[],String) per specificare la codifica ma sto utilizzando una libreria esterna che non posso modificare.
String src = "with accents: é à";
byte[] bytes = src.getBytes("UTF-8");
System.out.println("UTF-8 decoded: "+new String(bytes,"UTF-8"));
System.out.println("Default decoded: "+new String(bytes));
L'output per questo è:
UTF-8 decoded: with accents: é à Default decoded: with accents: é Ã
Ho provato a modificare la proprietà di sistema file.encoding
ma non funziona.
Soluzione
È necessario modificare la locale prima di avviare la JVM;Vedere:
Alcuni posti sembrano implicare che puoi farlo impostando la variabile file.encoding all'avvio della JVM, come ad esempio
java -Dfile.encoding=UTF-8 ...
...ma non l'ho provato personalmente.Il modo più sicuro è impostare una variabile di ambiente nel sistema operativo.
Altri suggerimenti
Citato da defaultCharset()
Il chatset predefinito viene determinato durante l'avvio della macchina virtuale e in genere dipende dalla locale e dal chatset del sistema operativo sottostante.
Nella maggior parte dei sistemi operativi è possibile impostare il set di caratteri utilizzando una variabile di ambiente.
Penso che tu voglia questo:System.setProperty("file.encoding", "UTF-8");
Ha risolto alcuni problemi, ma ne ho ancora altri.I caratteri "í" e "Í" non vengono convertiti correttamente se il SO è ISO-8859-1.Solo con l'opzione JVM all'avvio, ho risolto.Ora solo la mia console Java nell'IDE NetBeans blocca il set di caratteri quando mostra caratteri speciali.