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. 如果您想知道系统的当前代码页,最简单的方法(并且它与操作系统无关!)是调用Charset.defaultCharset().

下一次,请先尝试描述你的问题,你想要达到什么,你已经尝试过什么。

于 2012-05-22T08:58:49.390 回答
0

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

于 2012-05-22T07:23:27.040 回答
0

AFAIK,语言环境和字符集之间没有内在联系。例如,对于语言环境 en_US,您期望哪个字符集?ASCII/CP1252/MacRoman/ISO-8859-1/UTF-8/UTF-16?

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

于 2012-05-22T07:41:29.643 回答