10

Is there a way to change the encoding used by the String(byte[]) constructor ?

In my own code I use String(byte[],String) to specify the encoding but I am using an external library that I cannot change.

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));

The output for this is :

UTF-8 decoded: with accents: é à
Default decoded: with accents: é à

I have tried changing the system property file.encoding but it does not work.

4

3 に答える 3

7

JVM を起動する前にロケールを変更する必要があります。見る:

Java、バグ ID 4163515

一部の場所では、JVM の起動時に file.encoding 変数を設定することでこれを行うことができることを暗示しているようです。

java -Dfile.encoding=UTF-8 ...

...しかし、私はこれを自分で試していません。最も安全な方法は、オペレーティング システムで環境変数を設定することです。

于 2008-09-17T09:12:56.080 に答える
1

defaultCharset()から引用

デフォルトの文字セットは、仮想マシンの起動時に決定され、通常は基盤となるオペレーティング システムのロケールと文字セットに依存します。

ほとんどの OS では、環境変数を使用して文字セットを設定できます。

于 2008-09-17T09:12:26.457 に答える
1

これが必要だと思います: System.setProperty("file.encoding", "UTF-8");

いくつかの問題は解決しましたが、まだ別の問題があります。SO が ISO-8859-1 の場合、文字「í」と「Í」は正しく変換されません。起動時にJVMオプションを使用するだけで解決します。現在、NetBeans IDE の Java コンソールだけが、特殊文字を表示するときに文字セットをクラッシュさせています。

于 2012-10-06T16:42:42.313 に答える