如何确定字符串的字符集?

时间:2008-11-25 22:18:34

标签: perl utf-8 character-encoding

我有几种不同语言的文件。我以为它们都是UTF-8编码,但现在我不太确定。有些角色看起来很好,有些则没有。有没有办法可以打破字符串并尝试识别字符集?也许在白色空间上拆分然后识别每个单词?最后,是否有一种简单的方法可以将字符从一个集合转换为UTF-8?

3 个答案:

答案 0 :(得分:6)

如果你不确定字符集肯定你只能猜测。 utf8::valid可能会对此有所帮助,但您无法确切知道。如果你知道如果它不是unicode它必须是一个特定的字符集(比如Latin-1),你很幸运。如果你不知道,你就搞砸了。在任何情况下,除非另有说明,否则应始终假设整个文件都在相同的字符集中。如果不这样做,你将失去理智。

关于如何在字符集之间进行转换的问题:Encode是否可以为您做到这一点

答案 1 :(得分:6)

确定文件是否可能是UTF-8应该非常简单。如果编码不是UTF-8,则确定编码通常非常困难。

如果文件使用UTF-8编码,则每个字节的高位应遵循一种模式。如果一个字符是一个字节,则其高位将被清零(零)。否则,n字节字符(其中n为2-4)将第一个字节的高n位设置为1,然后是单个零位。以下n - 1字节应该具有最高位设置和第二高位清除。

如果文件中的所有字节都遵循这些规则,则可能使用UTF-8进行编码。我可能会说,因为任何人都可以发明一种新的编码,它恰好或偶然地遵循相同的规则,但以不同的方式解释代码。

请注意,使用US-ASCII编码的文件将遵循这些规则,但每个字节的高位为零。可以将这样的文件视为UTF-8,因为它们在此范围内兼容。否则,它是一些其他编码,并没有区分编码的固有测试。你必须使用一些上下文知识来猜测。

答案 2 :(得分:2)