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

Rob*_*ert 23 java platform character-encoding

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

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

System.out.println("Default Charset=" + Charset.defaultCharset());
Run Code Online (Sandbox Code Playgroud)

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

Aar*_*lla 28

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

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

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

  • 如果我可以问,该怎么办?如果字符集可以更改并损坏您的数据,则需要通过确保您的应用程序未看到用户的默认值来处理此问题.如果charset可以更改,但这对您的应用程序没有影响,为什么要这么麻烦? (2认同)
  • 主类导入的类中的@Fordi`static`代码仍然可以看到旧值。更好的解决方案是使用-Dfile.encoding = UTF-8调用Java。但这也无法解决许多文件格式根本不使用UTF-8作为默认编码的问题,或者懒惰的用户会尝试将具有未知编码的文件馈送到软件中。 (2认同)

Mic*_*rdt 8

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

可能不如你想的那么好.

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

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

(只是UTF-16?).

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

这都是一个巨大的混乱,这正是Unicode开发的原因.但混乱还没有消失,我们仍然必须处理它,而不是应该对什么编码给定的字节串被解释为文本的任何假设是,没有这样的东西作为纯文本.