2

コードが異なるプラットフォーム (少なくとも Windows と Linux) で同じ出力 (UTF-8 または UTF16) を生成する方法を知りたいです。
アプリケーションで使用するコードページを設定できると思っていましたが、コードページを設定するための情報が見つかりません。また、äöü やその他の非ラテン文字などの特殊文字を使用した場合に、コードページを設定しても実際に同じ出力が得られるかどうかはわかりません。

java.exe の引数を設定せずに機能するソリューションが必要です。

編集:
コンソールへの出力を意味します。他の出力メディアへの影響の可能性についてコメントいただければ幸いです。

4

2 に答える 2

1

文字セット (以前はコードページと呼ばれていました) は、一連の文字を一連のバイトに変換します。

Java API では、文字セットは のサブクラスとして実装されますCharset。文字とバイトの間で変換するすべての API 要素には、使用する文字セットを指定できます (多くの場合、代わりに文字セット名を渡すこともできるため、自分で検索する必要はありません)。文字セットを指定しない場合、これらのメソッドは通常、オペレーティング システムのデフォルトのエンコーディングにフォールバックします。

たとえばOutputStreamWriter、文字セットを取るコンストラクターを備えています。

try (Writer w = new OutputStreamWriter(System.out, "utf-8")) {
    w.write("Hello world");
}
于 2013-01-05T13:15:28.317 に答える
1

Javacharタイプは、Unicode 文字セットのすべてのコード ポイントを表すことができる UTF-16 を使用します。文字列が使用されるほぼすべての I/O には、何らかの暗黙的なトランスコーディング操作が含まれます。

文字データを損失や破損なしに保存および復元するには、通常、Unicode 変換形式のいずれかを使用するのが最適です。このトランスコーディング操作を実行するために使用できるリーダーライターのタイプがあります。デフォルトのコンストラクターは避けてください。デフォルトのエンコーディングに依存している可能性があります。通常は、明示的に UTF-8 を指定することをお勧めします。

端末への書き込みにはさまざまな問題があります。ここでは、別のアプリケーションによってデコードされるデータを書き込んでいるので、文字データを別のアプリケーションが理解できる形式で書き込む必要があります。

タイプは端末のConsoleエンコーディングを検出して使用System.outしますが、デフォルトのプラットフォーム エンコーディングを使用します。これは、歴史的な理由から Windows では異なります。その他の相違点は、ここに記載されています。cmd.exe で Unicode を使用する文書化された方法は、適切な Win32 API 呼び出しを使用することです。

私のブログからのいくつかの関連記事:

BalusCには、文字処理の実際的な問題のいくつかについての良い記事もあります: Unicode - How to get the characters right?

于 2013-01-05T14:35:20.540 に答える