如何区分UTF-8和ASCII文件?

3
如何区分UTF-8(无BOM)和ASCII文件?

https://dev59.com/13NA5IYBdhLWcg3wQ7e4 - Anders Lindahl
2
所有的ASCII文件也都是UTF-8文件。 :) - tchrist
请检测文本文件类型:ANSI vs UTF-8。 - Marjan Venema
2个回答

5
如果文件中包含任何一个最高位设置的字节,则它不是ASCII。
因此,如果唯一的可能性是ASCII或UTF-8,则它是UTF-8。
如果文件只包含最高位清除的字节,则区分它是ASCII还是UTF-8没有意义,因为无论哪种方式都表示完全相同的字符序列。但你可以称它为ASCII。
当然,这并不能区分UTF-8和ISO Latin或CP1252,也不能确认所谓的UTF-8是否有效。

1
如果文件不包含高字节,则称其为“ASCII”可能是值得的,例如在给它指定MIME类型时。这将确保那些可能不知道“UTF-8”意义的损坏的传统邮件系统仍然接受纯ASCII传输。;-) - R.. GitHub STOP HELPING ICE
请注意,如果您确认文件解析为有效的UTF-8,则可以高度确定该文件实际上是要作为UTF-8进行解释的。UTF-8多字节序列的特性使它们在作为旧代码页数据进行解释时几乎肯定是无意义的。 - R.. GitHub STOP HELPING ICE
是的,这就是我的意思 - 你可以称之为ASCII,而如果设置了任何高位,则不能称之为ASCII。如果没有设置高位,则说它是ASCII 而不是 UTF-8 是没有意义的 - 无论最初是否打算使用UTF-8,实际上现在它是UTF-8,并且可以被视为UTF-8,包括通过UTF-8解码器运行它。我可能表达得不太清楚。 - Steve Jessop
你说得很清楚,我只是在补充一些信息,解释为什么将它称为“ASCII”可能有用,尽管它实际上当然是同时支持ASCII和UTF-8的。 - R.. GitHub STOP HELPING ICE

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接