Javaで次のことを試すと:
System.out.println(System.getProperty("file.encoding"));
cp1252
エンコーディングとして取得します。
この値がどこから来ているかを知る方法はありますか? (環境変数など)
Windows XP の systeminfo などのコマンドを使用して、コマンド プロンプトにエンコーディングの値を出力したいと思います。
cp1252 は、MS Windows (Microsoft が ANSI と呼んでいるもの) の英語版のインストールにおけるデフォルトのエンコーディングです。デフォルトでは、Java はシステム ロケールをデフォルトの文字エンコーディングとして使用します。これが何を意味するかは、システムに依存します。一般に、デフォルトのエンコーディングに依存するのは好きではありません。テキストが純粋な ASCIIになることがわかっている場合は無視InputStreamReader
します。OutputStreamWriter
String
getBytes
cp1252 は、Windows コマンド プロンプトのデフォルトのエンコーディングではないことに注意してください。これはさらに古い cp437 であり、コマンドを使用して表示 (および変更) できますchcp
。
その値は、少なくとも Windows では、非 Unicode テキストに使用される従来のコードページです。これは、古い ANSI API を使用するときに OS が文字列を変換するものです。新しいプログラムでは効果がないはずです(残念ながら、API関数のWバリアントではなくAバリアントを使用するプログラムはまだ十分に見られます)。
Java は Unicode のみを使用するため、Java プログラムにとっては、そのどれも重要ではありません。ただし、システムのコードページでテキスト ファイルを読み書きする場合は、それが必要になります。
ただし、コマンド プロンプトの場合、コンソールはデフォルトで DOS 時代 (850 または 437 がかなり一般的) の 1 つを模倣する OEM エンコーディングを使用するため、そのエンコーディングは重要な価値がありません。
これは実際には Java とは何の関係もないため、WSHスクリプトの使用を選択できます。
' save this script as printANSI.vbs
' usage: cscript /Nologo printANSI.vbs
Set objShell = CreateObject("WScript.Shell")
cp = objShell.RegRead("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001" &_
"\Control\Nls\CodePage\ACP")
WScript.Echo cp
chcp
コマンドも参照してください。Windows コマンド プロンプトでエンコーディングがどのように機能するかを確認することをお勧めします (このブログ投稿のいくつかのリンク)。
私が発見した限りでは、これは Java ソース ファイルのエンコーディングです。テキスト ファイルのエンコーディングを変更すると、出力が変更されます。Eclipse では、Resource プロパティから変更します (Alt+Enter またはそのファイルを右クリックして Resource に移動します)。テキスト ファイルのエンコーディングを cp1252 から別のものに変更します。たとえば、UTF-8 などです。出力は cp1252 ではなくなります。
このエンコーディングは JVM によって設定されるため、外部から取得しても意味がないと思います