web-dev-qa-db-ja.com

Java:異なるプラットフォームでのプラットフォームのデフォルトの文字セット?

一部のレガシーコードは、プラットフォームのデフォルトの文字セットに依存して翻訳されています。 「西部の世界」でのWindowsとLinuxのインストールについて、私はそれが何を意味するかを知っています。しかし、ロシアまたはアジアのプラットフォームについて考えると、それらのプラットフォームのデフォルトの文字セット(UTF-16だけ)が何であるかはまったくわかりません。

したがって、次のコード行を実行すると何が得られるのか知りたいのですが。

System.out.println("Default Charset=" + Charset.defaultCharset());

編集:ここでは、文字セットの問題とUnicodeとの違いについては説明しません。どのオペレーティングシステムがどの特定の文字セットをもたらすかを収集したいだけです。具体的な値のみ投稿してください!

24
Robert

これはユーザー固有の設定です。最近の多くのLinuxシステムでは、UTF-8です。 Macでは、MacRomanです。 Windowsでは米国では多くの場合CP1250、ヨーロッパではCP1252です。中国では、簡体字中国語(Big5またはGB *)がよく見られます。

ただし、これはシステムのデフォルトであり、各ユーザーはいつでも変更できます。おそらくこれが解決策です:システムプロパティfile.encodingを使用してアプリを起動するときにエンコードを設定します

この回答を参照 それを行う方法。これをアプリを起動する小さなスクリプトに組み込むことをお勧めします。これにより、ユーザーのデフォルトが汚染されません。

29
Aaron Digulla

「西部の世界」でのWindowsとLinuxのインストールについて、私はそれが何を意味するかを知っています。

おそらくあなたが思うほどではない。

しかし、ロシアやアジアのプラットフォームについて考えると、私は彼らのプラットフォームのデフォルトの文字セットが何であるか完全にわかりません

通常、これはその国で歴史的に使用されているエンコーディングです。

(ちょうどUTF-16?)。

ほとんど間違いなく。 Unicode規格が存在する前にコンピューターの使用が広まり、各言語領域はその言語をサポートできる1つ以上のエンコーディングを開発しました。 ASCIIの外で128文字未満が必要な人は、通常「拡張ASCII」を開発しました。その多くは最終的に ISO-8859 として標準化されましたが、他の人は2バイトを開発しましたエンコーディング、多くの場合、競合するエンコーディングがいくつかあります。たとえば、日本では、電子メールは通常 [〜#〜] jis [〜#〜] を使用しますが、Webページは Shift-JIS を使用します。一部のアプリケーションは EUC-JP を使用します。これらのいずれかは、Javaのプラットフォームのデフォルトエンコーディングとして検出される可能性があります。

Unicodeが開発されたのはまさにそのためです。しかし、混乱はまだ解消されておらず、対処する必要があり、テキストとして解釈される特定のバイトの束がどのエンコーディングであるかについての仮定を行うべきではありません。 プレーンのようなものはありませんテキスト

8