4

我正在尝试确定是否使用

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

或者

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

我正在阅读有关字符集的所有信息,以确定我必须通过 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 相同?

我应该只使用字符集“ISO-8559-1”,一切都会好起来的吗?

4

2 回答 2

9

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

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

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

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

于 2015-06-10T08:10:14.790 回答
1

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

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

于 2015-06-10T08:32:13.637 回答