有没有办法从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)这样的方法
答案 0 :(得分:4)
你不可能,但没有意义。实际上,任何语言都可以用几种不同的字符编码来编写,例如英文可以写成:ASCII,ISO8859-1,ISO-8859-15,Windows 1252,UTF-7,UTF-8,UTF-16,UTF- 32和许多,更多,基本上是所有 Windows代码页。例如。
我不确定你在寻找什么,所以让我建议一下:
如果您要保存数据,请使用UTF-8而不管Locale。总是。是的,总是。不要担心这个空间,对于许多语言来说它足够有效并且磁盘空间很便宜。
如果您想知道用户可能使用哪种字符编码,则认为它们仅限于一个字符编码是无效的。相反,您可以考虑使用ICU Charset Detector检测编码(详细了解检测here)。
如果您想知道系统的当前代码页,最简单的方法是操作Charset.defaultCharset()
。
下次,请先尝试描述您的问题,您想要达到的目标以及您已尝试过的内容。
答案 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中的一种。