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

Determining ISO-8859-1 vs US-ASCII charset

我正在尝试确定是否使用

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

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

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

当我的示例文件包含 "European" 个字母(挪威语:å ø æ)时,以下命令告诉我文件编码是 "iso-8859-1"

file -bi example.txt

但是,当我复制同一个示例文件并将其修改为包含不同的数据时,没有任何挪威语文本(比方说,我将 "Bjørn" 替换为 "Bjorn"),然后同样的命令告诉我文件编码是 "us-ascii".

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

这是什么意思?如果其中没有 "European" 个字符,ISO-8859-1 在实践中是否与 US-ASCII 相同?

我应该只使用一个字符集 "ISO-8559-1" 一切都会好吗?

如果文件仅包含 7 位 US-ASCII 个字符,则可以读取为 US-ASCII。它没有说明什么是字符集。没有需要不同编码的字符可能只是巧合。

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

但是,您不能只选择一种编码并假设 "everything will be OK"。非常常见的 UTF-8 编码也包含 US-ASCII 字符集,但它将例如 äöå 字符编码为两个字节而不是 ISO-8859-1 的一个字节。

TL;DR:不要假设有编码的东西。找出意图并使用它。如果您找不到它,请观察数据以尝试找出要使用的正确字符集(正如您自己指出的那样,多种编码可能至少暂时有效)。

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

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