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.

È stato utile?

Soluzione

È necessario modificare la locale prima di avviare la JVM;Vedere:

Java, ID bug 4163515

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top