某些遗留代码依赖于平台的默认字符集进行翻译。对于“西方世界”中的Windows和Linux安装,我知道这意味着什么。但是考虑到俄罗斯或亚洲平台,我完全不确定他们平台的默认字符集是什么(只是UTF-16?)。
因此,我想知道执行以下代码行时会得到什么:
System.out.println("Default Charset=" + Charset.defaultCharset());
修改 我不想在这里讨论charsets的问题及其与unicode的区别。我只是想收集哪些操作系统将导致什么特定的字符集。请仅发布具体值!
答案 0 :(得分:25)
这是用户特定的设置。在许多现代Linux系统上,它是UTF-8。在Mac上,它是MacRoman。在Windows上的美国,它通常是CP1250,在欧洲它是CP1252。在中国,您经常会找到简体中文(Big5或GB *)。
但这是系统默认值,每个用户可以随时更改。这可能是解决方案:使用系统属性file.encoding
See this answer怎么做。我建议把它放到一个启动你的应用程序的小脚本中,这样用户默认就不会受到污染。
答案 1 :(得分:7)
对于“西方世界”中的Windows和Linux安装,我知道这意味着什么。
可能不如你想象的那么好。
但是考虑到俄罗斯或亚洲平台,我完全不确定他们平台的默认字符集是什么
通常,这是他们国家历史上使用的任何编码。
(只是UTF-16?)。
绝对不是。计算机使用在Unicode标准存在之前广泛传播,并且每个语言区域开发了一种或多种可以支持其语言的编码。那些在ASCII之外需要少于128个字符的人通常会开发一个“扩展ASCII”,其中许多最终标准化为ISO-8859,而其他人则开发了双字节编码,通常是几个竞争编码。例如,在日本,电子邮件通常使用JIS,但网页使用Shift-JIS,而某些应用使用EUC-JP。任何这些都可能在Java中作为平台默认编码遇到。
这是一个巨大的混乱,这正是Unicode开发的原因。但是这个混乱还没有消失,我们仍然必须处理它,不应该假设编码给定字节的字符串被解释为文本。There Ain't No Such Thing as Plain Text。