2012-02-16 17 views
17

レガシーコードの中には、翻訳のためのプラットフォームのデフォルトの文字セットに依存するものがあります。 「西洋の世界」におけるWindowsとLinuxのインストールでは、その意味を理解しています。しかし、ロシア語やアジアのプラットフォームについて考えてみると、私はそのプラットフォームのデフォルトの文字セットが何であるかは完全に分かりません(ちょうどUTF-16?)。Java:プラットフォームによって異なるプラットフォーム上のデフォルトの文字セットですか?

そこで私は次のコード行を実行するときに、私はなるだろう知っているしたいと思います:

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

は編集: 私はここにUnicodeに文字セットとそれらの違いの問題を議論する必要はありません。私はちょうどどのオペレーティングシステムが特定の文字セットになるかを集めたいと思う。具体的な価値だけを投稿してください!

答えて

21

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

これはシステムのデフォルト設定で、各ユーザーはいつでも変更できます。おそらく解決策は次のとおりです。システムプロパティfile.encoding

See this answerを使用して、アプリケーションを起動するときにエンコードを設定します。私はこれをあなたのアプリを起動する小さなスクリプトに入れることをお勧めします。そのため、ユーザーのデフォルトは汚染されていません。

+0

trueの場合、システムのデフォルトの文字セットはユーザーによって変更できますが、非開発者はいくつですか? – Robert

+1

グローバルネットワークにログインしている企業ネットワークの人々はどうですか?私が言っているのは、そこには何の役に立つ価値もないと思っています。あなたのコードでは、データの読み込み時に常にそのエンコーディングを指定する必要があります。それがうまくいかない場合は、 'file.encoding'やものを設定する必要があります** ** break :-) –

+1

@Aaron Digulla:データがユーザによって提供され、メタデータをエンコードせずに来る場合、プラットフォームのデフォルト実際にはエンコードが最善の策かもしれません。 –

6

"西洋の世界"でのWindowsとLinuxのインストールでは、私はその意味を知っています。

おそらくあなたもそうではないと思います。

しかし、私は彼らのプラットフォームのデフォルト文字セットが

何であるか全く分からないよロシアやアジアのプラットフォームを考える通常、それは歴史的に自分たちの国で使用されているものエンコーディングです。

(単なるUTF-16?)。

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

これはまさに大混乱で​​あり、まさにUnicodeが開発された理由です。しかし、混乱はまだ消えていません。それでも対処しなければならず、テキストとして解釈されるバイトの符号化が何であるかについては何も仮定しないでください。There Ain't No Such Thing as Plain Text

+0

マイケル、あなたはとても優秀なので、涙が私に届きます。そのような災害で、私は「デフォルトエンコード」を禁止するために標準ライブラリを猿でパッチすることを考えました。私はこの問題によって修正不可能に切り捨てられたテラバイトのコーパスを持っています。それはJava自体ではなく、ここで問題となる不合理なJavaのデフォルトです。確かにそれに対処できます。私はそれを全面的に修正する方法を知らない。なぜなら、時間の始めから終わりまでバグに対応することは、Javaの* modus operandi *であるように思えるからだ。デザインの欠陥を修正する方法はわかりません。 – tchrist

+0

事は "あなたは何も仮定していない"ことはできません。ユーザー*は、エンコーディングの表示がないプレーンテキストファイルを作成します。レガシーシステム*は、未知のエンコーディングの文字列を格納します*。 – plugwash

関連する問題