00ffの後にUnicode値を出力することはできません。代わりに、Eclipseでこれを実行した後に「?」文字が表示されます。これは期待できる動作ですか?
System.out.println("u01ff");
回答:
回答№1は5Eclipseは、デフォルトでプラットフォームのデフォルトのエンコード(Windowsではcp1252)を使用して、テキストベースのファイルの保存中および標準出力ストリームへの書き込み中に文字をデコードします( System.out
)。世界支配を達成するには、明示的にutf-8に設定する必要があります。
この方法では、これらを使用する必要もありません。 uXXXX
Unicodeは、テキストベースのソースファイルでこれらの文字を表すためにもうエスケープします。
これらの疑問符は、出力ストリームで使用される文字セットが入力ストリームで指定されている文字をサポートしていないために発生します。
参照:
回答№2の場合は3
問題は、使用されるエンコーディングです System.out
;デフォルトでは、「プラットフォーム」のネイティブエンコーディングです(通常はutf-8ではありません)。ストリームを置き換えることにより、エンコードを明示的に変更できます。
try {
PrintStream ps = new PrintStream(System.out, true, "utf-8");
System.setOut(ps);
} catch (UnsupportedEncodingException error) {
System.err.println(error);
}
この後(基本環境でのフォントまたはエンコードの問題がなければ)、すべてのUnicode文字が正しく印刷されるはずです。 System.out
.
EDIT 私とBalusCの間の行き来に基づいて 彼の答え、これは、Eclipse内で物事を機能させるのに十分ではありません(または必要ですら)。そこには、解決すべき2つの問題があります。 System.out
正しいエンコードを使用する場合Eclipseコンソールビューでコンソール出力を表示します。 BalusCの答えは、これら両方の問題に対処しています。残念ながら、Eclipse以外での実行には対処しません。そのためには、上記の私のアプローチを使用するか、デフォルトのランタイムエンコーディングを設定する必要があります。これは、フラグを使用して行うことができます -Dfile.encoding=utf-8
コマンドラインまたは環境変数の設定 JAVA_TOOL_OPTIONS
含める -Dfile.encoding=utf-8
。 Eclipseの外でコードを正常に実行するには、おそらくそれが最善のアプローチです。
回答№3の場合は0
Javaはこれらの文字をうまく処理できます。ただし、出力チームには特定のエンコーディングがあります。
そして、そのエンコーディングがutf-8のようなものでない限りまたはUTF-16の場合、「すべての文字をUnicodeでエンコードすることはできません。表現できない文字を検出すると、疑問符に置き換えられます。
回答№4の場合は0
JVMは、デフォルトのファイルエンコーディングを使用して System.out
同じように。
たとえば、Linuxの場合、 $LANG
変数がに設定されている de_DE.utf-8
の値 file.encoding
それに応じて派生し、に設定されます utf-8
.
JVMが必要な設定を取得できない場合は、システムプロパティを設定してファイルエンコーディングを変更できます。
java -Dfile.encoding = utf-8 ...
コマンドラインで
あなたもこれを行うことができます Eclipse を使って 設定を実行する (コンテキストメニュー-実行-実行構成...-引数-VM引数)
したがって、これはコマンドラインと Eclipse、ソースでエンコードを明示的に定義する必要はありません。
値が
java -Dfile.encoding = iso-8859-1
たとえば、Unicode文字のサブセットのみを表現できます。これは、その文字セットが限られた数の文字しかサポートしていないためです。他のものは次のようになります ?
.
心に留めておくべき2つの他のものがあります:
ストリームを受信するデバイス(端末、シェルなど)は、それを正しくデコードする必要があります。たとえば、GNOMEの端末に関しては、メニューで文字エンコーディングを設定できます。
その端末などで使用されているフォントには、この文字のグラフィック表現が含まれている必要があります