繁体   English   中英

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

[英]How do I determine the character set of a string?

我有几个不同语言的文件。 我以为它们都是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,因为它们在此范围内兼容。 否则,它是一些其他编码,并没有区分编码的固有测试。 你必须使用一些上下文知识来猜测。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM