Java:平台在不同平台上的默认字符集?

一些遗留代码依赖于平台的默认字符集进行翻译。 对于“西方世界”中的Windows和Linux安装,我知道这意味着什么。 但是考虑到俄罗斯或亚洲平台,我完全不确定他们平台的默认字符集是什么(只是UTF-16?)。

因此,我想知道在执行以下代码行时我会得到什么:

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

编辑:我不想在这里讨论charsets的问题以及它们与unicode的区别。 我只是想收集哪些操作系统会导致什么特定的字符集。 请仅发布具体值!

这是用户特定的设置。 在许多现代Linux系统上,它是UTF-8。 在Mac上,它是MacRoman。 在Windows上的美国,它通常是CP1250,在欧洲它是CP1252。 在中国,您经常会找到简体中文(Big5或GB *)。

但这是系统默认值,每个用户可以随时更改。 这可能是解决方案:使用系统属性file.encoding启动应用程序时设置编码

看到这个答案如何做到这一点。 我建议把它放到一个启动你的应用程序的小脚本中,这样用户默认就不会受到污染。

对于“西方世界”中的Windows和Linux安装,我知道这意味着什么。

可能不如你想象的那么好。

但考虑到俄罗斯或亚洲平台,我完全不确定他们平台的默认字符集是什么

通常它是在他们的国家历史上使用的任何编码。

(只是UTF-16?)。

绝对不是。 计算机使用在Unicode标准存在之前广泛传播,并且每个语言区域开发了一种或多种可以支持其语言的编码。 那些在ASCII之外需要少于128个字符的人通常会开发一个“扩展ASCII”,其中许多最终标准化为ISO-8859 ,而其他人则开发了双字节编码,通常是几个竞争编码。 例如,在日本,电子邮件通常使用JIS ,但网页使用Shift-JIS ,而某些应用程序使用EUC-JP 。 在Java中,任何这些都可能作为平台默认编码遇到。

这都是一个巨大的混乱,这正是Unicode开发的原因。 但是这个烂摊子还没有消失,我们仍然要处理它,不应该对编码给定字节的字符串进行任何假设,因为文本都在这里。 没有像纯文本那样的东西 。