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

vik*_*eve 3 java ascii iso-8859-1 character-encoding character-set

我想确定是否使用

PrintWriter pw = new PrintWriter(outputFilename, "ISO-8859-1");
Run Code Online (Sandbox Code Playgroud)

要么

PrintWriter pw = new PrintWriter(outputFilename, "US-ASCII");
Run Code Online (Sandbox Code Playgroud)

我正在阅读所有有关字符集的内容,以确定我必须通过java代码以相同编码创建的示例文件的字符集.

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

file -bi example.txt
Run Code Online (Sandbox Code Playgroud)

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

file -bi example-no-european-letters.txt
Run Code Online (Sandbox Code Playgroud)

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

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

Kay*_*man 6

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

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

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

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