我有几个不同语言的文件.我以为它们都是UTF-8编码,但现在我不太确定.有些角色看起来很好,有些则没有.有没有办法可以打破字符串并尝试识别字符集?也许在白色空间上拆分然后识别每个单词?最后,是否有一种简单的方法可以将字符从一组转换为UTF-8?
如果你不确定字符集肯定你只能猜测,基本上.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,因为它们在此范围内兼容.否则,它是一些其他编码,并没有区分编码的固有测试.你必须使用一些上下文知识来猜测.