3

ANSI CODEPAGE から java.nio.charset.Charset を取得し、ロケールから ANSI コードページを取得する方法はありますか? たとえば、ロケールが「en_US」の場合、文字セットを「cp1252」にしたいので、

private final Charset CS1252 = Charset.forName("cp1252");

または、日本語のロケール「ja_JP」がある場合、対応する文字セットを取得したい

private final Charset CS932 = Charset.forName("ms932");

どうすればJavaでそれを達成できますか? だから私が必要なのは getCharsetForLocale(java.util.Locale loc) のようなメソッドです

4

3 に答える 3

4

できませんし、意味がありません。実際、どの言語もいくつかの異なる文字エンコーディングで記​​述できます。たとえば、英語は次のように記述できます: ASCII、ISO8859-1、ISO-8859-15、Windows 1252、UTF-7、UTF-8、UTF-16、UTF- 32 など、基本的にすべての Windows コード ページが含まれます。

私はあなたが何を探しているのかわからないので、これを提案させてください:

  1. データを保存する場合は、ロケールに関係なく UTF-8 を使用してください。いつも。はい、いつも。スペースについて心配する必要はありません。多くの言語では十分に効率的であり、ディスク スペースも安価です。

  2. ユーザーが使用する可能性のある文字エンコーディングの種類を知りたい場合、それらが単一のエンコーディングに制限されていると考えるのは妥当ではありません。代わりに、たとえばICU Charset Detectorを使用してエンコーディングを検出することを考えるかもしれません(検出の詳細については、こちらを参照してください)。

  3. システムの現在のコード ページを知りたい場合、それを行う最も簡単な方法は (OS に依存しません!) を呼び出すことCharset.defaultCharset()です。

次回は、まずあなたの問題、達成したいこと、すでに試したことを説明してみてください。

于 2012-05-22T08:58:49.390 に答える
0

クラス Charset のメソッドでCanonical Name取得できる Charset のを取得しようとしていると思います。name()

于 2012-05-22T07:23:27.040 に答える
0

私の知る限り、ロケールと文字セットの間に本質的な関係はありません。たとえば、ロケール en_US の場合、どの文字セットを期待しますか? ASCII/CP1252/マクロマン/ISO-8859-1/UTF-8/UTF-16?

日本語の場合は、少なくとも Shift JIS、CP932、EUC-JP、ISO-2022-JP、または UTF-8 のいずれかを使用できます。

于 2012-05-22T07:41:29.643 に答える