我有几个不同语言的文件。我以为它们都是 UTF-8 编码的,但现在我不太确定。有些角色看起来不错,有些则不然。有没有办法可以分解字符串并尝试识别字符集?也许在空白处分割然后识别每个单词?最后,有没有一种简单的方法可以将字符从一组转换为 UTF-8?
3 回答
如果您不确定字符集,则基本上只能猜测。utf8::valid可能会帮助你,但你不能确定。如果您知道如果它不是 unicode,则它必须是特定的字符集(如 Latin-1),那么您很幸运。如果你不知道,你就完蛋了。在任何情况下,除非另有说明,否则您应该始终假定整个文件使用相同的字符集。如果你不这样做,你就会失去理智。
至于您的问题如何在字符集之间进行转换:Encode可以为您做到这一点
确定一个文件是否可能是 UTF-8 应该很容易。通常,如果不是 UTF-8,则确定编码将非常困难。
如果文件使用 UTF-8 编码,则每个字节的高位应遵循一个模式。如果一个字符是一个字节,它的高位将被清除(零)。否则,n
字节字符(其中 n 为 2-4)将n
第一个字节的高位设置为 1,后跟单个零位。以下n - 1
字节都应设置最高位并清除第二高位。
如果文件中的所有字节都遵循这些规则,则它可能使用 UTF-8 编码。我说可能,因为任何人都可以发明一种新的编码,这种编码恰好遵循相同的规则,有意或无意地,但对代码的解释不同。
请注意,使用 US-ASCII 编码的文件将遵循这些规则,但每个字节的高位为零。可以将此类文件视为 UTF-8,因为它们在此范围内是兼容的。否则,它是某种其他编码,并且没有固有的测试来区分编码。您必须使用一些上下文知识来猜测。