System.outを使用してUnicode文字(♠)を書き込もうとしていますが、代わりに疑問符が出力されます。
疑問符の代わりに適切なUnicode文字を表示するにはどうすればよいですか?
WindowsでIntelliJIDEAを使用していて、IDE内から印刷しようとしています。
System.outを使用してUnicode文字(♠)を書き込もうとしていますが、代わりに疑問符が出力されます。
疑問符の代わりに適切なUnicode文字を表示するにはどうすればよいですか?
WindowsでIntelliJIDEAを使用していて、IDE内から印刷しようとしています。
Help>に移動しEdit Custom VM options...、次のオプションを追加します。
-Dconsole.encoding=UTF-8
-Dfile.encoding=UTF-8
両方が必要かどうかはわかりませんが、うまくいきました。変更を適用するには、IntelliJを再起動する必要があります。
Intellijですべてのエンコード設定を変更し、Gradleでそれらのオプションを設定し、システムエンコーディングを変更しようとしましたが、これが機能した唯一の設定です。
TL; DR回答:
Settings
-> Editor
-> File Encodings
->に移動しProject Encoding
、「UTF-8」に設定します。
拡張された答え:
それが機能しない理由は、System.out.print()
呼び出しにブレークポイントを設定することで見つけることができます。ブレークポイントがヒットしたら、に追加System.out
できます。これは、または同様に不適切なものに設定されWatches
ていることがわかります。System.out.textOut.out.se.cs
windows-1252
私のために魔法のように働いた設定(理由はわかりません)はSettings
-> Editor
-> File Encodings
->にありProject Encoding
ます。これを「UTF-8」に設定する必要があります。
次に、Unicode文字がコンソールに正しく表示され、デバッガーでもう一度簡単に見ると、の値System.out.textOut.out.se.cs
が魔法のようにに変わっていることがわかりUTF-8
ます。
System.out
アプリケーションの起動/デバッグ時にインスタンス化される文字セットにエディター設定がどのように、そしてなぜ影響するのかわからないため、「魔法のように」と言っています。誰かがこの背後にある論理が何であるかを知っているなら、教えてください!
ファイルエンコーディングは正しく構成されていますか?「設定|ファイルエンコーディング」がUTF-8を使用していることを確認してください。IDEエンコーディングがあり、すべてのファイルがUTF-8に設定されている場合、印刷♠は機能します。エンコーディングを変更した後、再コンパイルが必要になる場合があります。
System.outは、基盤となるオペレーティングシステムのデフォルトのエンコーディング(通常はISO-8859-1またはUTF-8)を使用します。1つ目は、XPでの1252コードページで私が持っているものです。
これはCMD.EXEウィンドウにありますか、それともIDE内にありますか?
最終的にWindowsの標準コマンドラインで広範囲のUnicode文字を印刷したい場合は、少し作業が必要です。デフォルトのラスターフォントは文字をサポートしません。アプリケーションは通常、UnicodeコンソールAPIを呼び出して文字をレンダリングする必要があります。Javaはそうではありません-最初に文字をネイティブ文字セットにエンコードし(不可逆プロセス)、次にANSI呼び出しを使用してそれらを出力します。ひどい詳細が必要な場合は、このブログ投稿を読むことができます。
設定が正しく構成されていません。ファイルエンコーディングがUTF-8、特に「デフォルトのエンコーディングプロパティファイル」に設定されていることを確認してください。私の側では、デフォルトのエンコーディングを変更するまで、以下の手順は機能しませんでした。
Intellij 2017.3.1(Community Edition)ファイルについて| 設定| エディター>ファイルエンコーディング。下のリンクをクリックして設定画像をご覧ください
マシンに適切なフォントがインストールされていますか?疑問符は、出力する文字のフォントがない場合に表示されます。
また、?を実行して出力していSystem.out.println("<your string>")
ますか?もしそうなら、フォントをインストールするだけでうまくいくはずです。
System.out
プログラム内から書き込もうとしている場合は、それは異なります。OutputStreamWriter
文字ストリームである、を使用する必要があります。のようなバイト指向のストリームに書き込むことはできませんOutputStream
。
OutputStreamWriter
のようなサブクラスのAPIとクラスリファレンスを検索しPrintWriter
ます。コンストラクターのロケールを指定してコンストラクターを作成します。例えば、
PrintWriter pw = new PrintWriter(System.out, "UTF-8");