【问题标题】:How do I determine the character set of a string?如何确定字符串的字符集?
【发布时间】:2008-11-25 22:18:34
【问题描述】:

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

【问题讨论】:

    标签: perl utf-8 character-encoding


    【解决方案1】:

    如果你不确定字符集,基本上你只能猜测。 utf8::valid 可能会帮助你,但你不能确定。如果您知道如果它不是 unicode,则它必须是特定的字符集(如 Latin-1),那么您很幸运。如果你不知道,你就完蛋了。在任何情况下,除非另有说明,否则您应该始终假设整个文件使用相同的字符集。如果你不这样做,你会失去理智。

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

    【讨论】:

      【解决方案2】:

      确定一个文件是否可能是 UTF-8 应该很容易。如果不是 UTF-8,那么确定编码通常会非常困难。

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

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

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

      【讨论】:

        【解决方案3】:
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-07
        • 1970-01-01
        • 2013-07-13
        • 2019-06-11
        相关资源
        最近更新 更多