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

时间:2015-06-10 08:02:42

标签: java character-encoding ascii iso-8859-1 character-set

我正在尝试确定是否使用

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

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

我正在阅读All about character sets以确定示例文件的字符集,我必须通过java代码以相同的编码创建该文件。

当我的示例文件包含“欧洲”字母(挪威语:åøæ)时,以下命令告诉我文件编码为“iso-8859-1”

file -bi example.txt

但是,当我获取同一个示例文件的副本并修改它以包含不同的数据时,没有任何挪威语文本(假设我将“Bjørn”替换为“Bjorn”),那么相同的命令会告诉我文件编码是“us-ascii”。

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

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

我应该使用charset“ISO-8559-1”,一切都会好吗?

2 个答案:

答案 0 :(得分:6)

如果文件只包含7位US-ASCII个字符,则可以将其读作US-ASCII。它没有说明什么是作为charset的意图。可能只是巧合,没有任何字符需要不同的编码。

ISO-8859-1(和-15)是一种常见的欧洲编码,能够对äöåéü和其他字符进行编码,前127个字符与US-ASCII相同(为方便起见,通常是这样)。 / p>

但是你不能只选择一个编码并假设“一切都会好”。非常常见的UTF-8编码也包含US-ASCII字符集,但它会将äöå个字符编码为两个字节而不是ISO-8859-1的一个字节。

TL; DR:不要假设有编码的东西。找出目的是什么并使用它。如果你找不到它,请观察数据以试图弄清楚使用什么是正确的字符集(正如你自己记录的那样,多个编码可能至少暂时有用)。

答案 1 :(得分:1)

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

如果您使用的是某些不同的国际字符,我们需要检查支持该特定字符的相应字符集,如UTF-8 ..