9

Javaで次のことを試すと:

System.out.println(System.getProperty("file.encoding"));

cp1252エンコーディングとして取得します。

この値がどこから来ているかを知る方法はありますか? (環境変数など)

Windows XP の systeminfo などのコマンドを使用して、コマンド プロンプトにエンコーディングの値を出力したいと思います。

4

5 に答える 5

8

cp1252 は、MS Windows (Microsoft が ANSI と呼んでいるもの) の英語版のインストールにおけるデフォルトのエンコーディングです。デフォルトでは、Java はシステム ロケールをデフォルトの文字エンコーディングとして使用します。これが何を意味するかは、システムに依存します。一般に、デフォルトのエンコーディングに依存するのは好きではありません。テキストが純粋な ASCIIになることがわかっている場合は無視InputStreamReaderします。OutputStreamWriterStringgetBytes

cp1252 は、Windows コマンド プロンプトのデフォルトのエンコーディングではないことに注意してください。これはさらに古い cp437 であり、コマンドを使用して表示 (および変更) できますchcp

于 2009-12-01T15:39:54.987 に答える
4

その値は、少なくとも Windows では、非 Unicode テキストに使用される従来のコードページです。これは、古い ANSI API を使用するときに OS が文字列を変換するものです。新しいプログラムでは効果がないはずです(残念ながら、API関数のWバリアントではなくAバリアントを使用するプログラムはまだ十分に見られます)。

Java は Unicode のみを使用するため、Java プログラムにとっては、そのどれも重要ではありません。ただし、システムのコードページでテキスト ファイルを読み書きする場合は、それが必要になります。

ただし、コマンド プロンプトの場合、コンソールはデフォルトで DOS 時代 (850 または 437 がかなり一般的) の 1 つを模倣する OEM エンコーディングを使用するため、そのエンコーディングは重要な価値がありません。

于 2009-12-01T15:07:50.000 に答える
2

これは実際には 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 コマンド プロンプトでエンコーディングがどのように機能するかを確認することをお勧めします (このブログ投稿のいくつかのリンク)。

于 2009-12-01T15:51:03.847 に答える
1

私が発見した限りでは、これは Java ソース ファイルのエンコーディングです。テキスト ファイルのエンコーディングを変更すると、出力が変更されます。Eclipse では、Resource プロパティから変更します (Alt+Enter またはそのファイルを右クリックして Resource に移動します)。テキスト ファイルのエンコーディングを cp1252 から別のものに変更します。たとえば、UTF-8 などです。出力は cp1252 ではなくなります。

于 2013-07-25T09:33:34.253 に答える
0

このエンコーディングは JVM によって設定されるため、外部から取得しても意味がないと思います

于 2009-12-01T15:07:06.193 に答える