从locale到ansi代码页到java charset?

时间:2012-05-22 06:50:22

标签: java localization character-encoding locale

有没有办法从ANSI CODEPAGE获取java.nio.charset.Charset和从区域设置获取ansi代码页?例如,如果我有语言环境“en_US”我想拥有charset“cp1252”,那么我可以调用

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

或者当我有日语的语言环境“ja_JP”时,我想获得相应的字符集,例如

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

我如何在java中实现这一目标?所以我需要的是像getCharsetForLocale(java.util.Locale loc)这样的方法

3 个答案:

答案 0 :(得分:4)

你不可能,但没有意义。实际上,任何语言都可以用几种不同的字符编码来编写,例如英文可以写成:ASCII,ISO8859-1,ISO-8859-15,Windows 1252,UTF-7,UTF-8,UTF-16,UTF- 32和许多,更多,基本上是所有 Windows代码页。例如。

我不确定你在寻找什么,所以让我建议一下:

  1. 如果您要保存数据,请使用UTF-8而不管Locale。总是。是的,总是。不要担心这个空间,对于许多语言来说它足够有效并且磁盘空间很便宜。

  2. 如果您想知道用户可能使用哪种字符编码,则认为它们仅限于一个字符编码是无效的。相反,您可以考虑使用ICU Charset Detector检测编码(详细了解检测here)。

  3. 如果您想知道系统的当前代码页,最简单的方法是操作Charset.defaultCharset()

  4. 下次,请先尝试描述您的问题,您想要达到的目标以及您已尝试过的内容。

答案 1 :(得分:0)

我认为您正在尝试检索Charset的Canonical Name,可以通过Charset类的name()方法获取。

答案 2 :(得分:0)

AFAIK,locale和charset之间没有内在联系。您对locale en_US有哪些charset的期望? ASCII / CP1252 /的MacRoman / ISO-8859-1 / UTF-8 / UTF-16?

对于日语,您至少可以使用Shift JIS,CP932,EUC-JP,ISO-2022-JP或UTF-8中的一种。

相关问题