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

IT小君   2021-10-30T03:56:13

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

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

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

PS:

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

评论(2)
IT小君

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

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

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

2021-10-30T03:56:14   回复
IT小君

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

可能没有你想的那么好。

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

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

(只是 UTF-16?)。

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

这一切都是一团糟,这正是开发 Unicode 的原因。但是混乱还没有消失,我们仍然需要处理它,并且不应该对将被解释为文本的给定字节进行何种编码做出任何假设。没有纯文本之类的东西

2021-10-30T03:56:14   回复