【问题标题】:Determining ISO-8859-1 vs US-ASCII charset确定 ISO-8859-1 与 US-ASCII 字符集
【发布时间】:2015-08-25 08:41:30
【问题描述】:

我正在尝试确定是否使用

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 相同?

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

【问题讨论】:

  • 您是否尝试在名为inputStream 的变量上使用PrintWriter?这听起来倒退了。
  • 你是对的——我的错。编辑修复。

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


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-19
      • 2012-09-29
      • 2016-11-26
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多