2012-02-06 410 views
1

我在我有权访问的软件存储库中运行以下命令:`file`中的ISO-8859是什么意思?

查找。 -not -name“.svn”-type f -exec file“{}”\;

,看到许多输出线像

./File.java:ISO-8859 C++程序文本

这是什么意思? ISO-8859是编码,不是某种编码。我期望所有文件都是UTF-8,但大多数文件都采用了现有编码。 ISO-8859也是UTF-8的真正子集吗?

是否有可能通过使用ISO-8859-1作为源编码安全地转换所有这些文件,同时将它转换为UTF-8,例如iconv

+0

_Edit_:编译Java源代码时,出现警告,指出德语变音符号没有适当的映射。 – KoenigGunther 2012-02-06 12:23:50

+0

@KoeingGunther您必须使用指定的正确编码来编译Java程序,例如'java -encoding UTF-8'或'java -encoding MacRoman'或'java -encoding ISO-8859-15'或任何您正在使用的编码。 Java有一个设计缺陷,即文件内部没有指定编码的方法。是的,这意味着你可以做一些邪恶的事情,比如'java -encoding UTF-16LE'或者whatnot;也许他们认为这是一个功能,但我没有。 – tchrist 2012-02-09 11:17:19

回答

1

的问题是不同的,但我认为答案是你在找什么:

Linux & C-Programming: How can I write utf-8 encoded text to a file?

+0

嗯,答案解决了我的问题的一部分,是的,但更令人兴奋的问题是我是否可以安全地将ISO-8859编码视为ISO-8859-1或ISO-8859-15,以及为什么'iconv'不选择具体的编码之一。 – KoenigGunther 2012-02-06 13:11:15

+0

如果他们是你自己的源文件,那么是的,它们不太可能包含捷克语或阿拉伯语,你不觉得吗? – tripleee 2012-02-28 05:11:13

1

恐怕Unix的file程序是相当糟糕的,在这一点。这仅表示它是以字节编码的。这并不意味着它是ISO-8859-1。它甚至可能处于非ISO字节的加密中,尽管它通常会将其解释出来。

我有一个比文件好得多的系统,但它在英语语料库上训练,所以可能不如德语。

简短的回答是,file的结果是不可靠的。你必须知道真正的编码来上传它。

0

file使用的字符集检测相当简单。它承认UTF-8。它通过查找ISO 8859编码有“漏洞”的0x80-0x9F范围内的字节来区分“ISO-8859”和“非ISO扩展ASCII”。但它不会尝试确定 ISO 8859编码正在使用中。这就是为什么它只是说ISO-8859而不是ISO-8859-1ISO-8859-15