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

2022-09-01 15:47:37

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

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

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

附言:

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


答案 1

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

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

请参阅此答案如何执行此操作。我建议将其放入一个启动应用的小脚本中,这样用户默认值就不会受到污染。


答案 2

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

可能没有你想象的那么好。

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

通常,这是他们国家/地区历史上使用的任何编码。

(只是 UTF-16?

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

这一切都是一团糟,这正是Unicode被开发的原因。但是这个烂摊子还没有消失,我们仍然必须处理它,不应该对一堆给定的字节进行编码以解释为文本做出任何假设。没有纯文本这样的东西


推荐