确定ISO-8859-1与US-ASCII字符集的区别

4

我正在尝试确定是否使用

PrintWriter pw = new PrintWriter(outputFilename, "ISO-8859-1");

或者

PrintWriter pw = new PrintWriter(outputFilename, "US-ASCII");

我正在阅读有关字符集的所有内容,以确定一个示例文件的字符集,我必须通过Java代码以相同的编码方式创建该文件。
当我的示例文件包含“欧洲”字母(挪威语:å ø æ)时,以下命令告诉我该文件的编码是“iso-8859-1”。
file -bi example.txt

然而,当我复制同一个示例文件并修改其包含不同的数据(没有任何挪威文本,例如,我用“Bjorn”替换“Bjørn”),那么相同的命令告诉我该文件编码为“us-ascii”。

file -bi example-no-european-letters.txt

这是什么意思?如果没有“欧洲”字符,ISO-8859-1实际上是否与US-ASCII相同?

我应该只使用字符集“ISO-8559-1”,那就万事大吉了吗?


你是想在名为 inputStream 的变量上使用 PrintWriter 吗?这听起来有些不对劲。 - Kayaman
你说得对 - 我犯了错误。正在编辑以修复。 - vikingsteve
2个回答

10
如果文件仅包含7位的US-ASCII字符,可以将其作为US-ASCII读取。这并不能说明文件的字符集意图。只是巧合地没有出现需要不同编码的字符。
ISO-8859-1(和-15)是一种常见的欧洲编码,能够编码äöåéü和其他字符,前127个字符与US-ASCII相同(通常出于方便的原因)。
然而,你不能随便选一个编码并假设“一切都会没问题”。非常常见的UTF-8编码也包含US-ASCII字符集,但它将编码例如äöå的字符作为两个字节,而不是ISO-8859-1的一个字节。
简而言之:不要对编码做出假设。找出意图并使用该字符集。如果无法找到,则观察数据以尝试确定正确的字符集(正如您自己注意到的,多种编码可能至少暂时有效)。

1

这取决于我们在相应文档中使用的不同字符类型。ASCII是7位字符集,ISO-8859-1是8位字符集,支持一些附加字符。但是,大多数情况下,如果您要从输入流中复制文档,则建议使用ISO-8859-1字符集。它适用于像记事本和MS Word这样的文本文件。

如果您使用了一些不同的国际字符,则需要检查支持该特定字符的相应字符集,如UTF-8。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接