Windows 检测C/C+中字符串的编码+;

Windows 检测C/C+中字符串的编码+;,windows,visual-c++,character-encoding,Windows,Visual C++,Character Encoding,给定一个字节数组(字符)指针形式的字符串,如何在C/C++(我使用的是visual studio 2008)中检测该字符串的编码??我做了一次搜索,但大多数样本都是用C#完成的 谢谢假设您知道输入数组的长度,您可以进行以下猜测: 首先,检查前几个字节是否与已知的匹配。如果他们这样做了,你就完了 接下来,在最后一个字节之前搜索“\0”。如果您找到一个,您可能正在处理UTF-16或UTF-32。如果找到多个连续的'\0',则可能是UTF-32 如果任何字符是从0x80到0xff,那么它肯定不是ASC

给定一个字节数组(字符)指针形式的字符串,如何在C/C++(我使用的是visual studio 2008)中检测该字符串的编码??我做了一次搜索,但大多数样本都是用C#完成的


谢谢

假设您知道输入数组的长度,您可以进行以下猜测:

  • 首先,检查前几个字节是否与已知的匹配。如果他们这样做了,你就完了
  • 接下来,在最后一个字节之前搜索“\0”。如果您找到一个,您可能正在处理UTF-16或UTF-32。如果找到多个连续的'\0',则可能是UTF-32
  • 如果任何字符是从
    0x80
    0xff
    ,那么它肯定不是ASCII或UTF-7。如果您将输入限制为某种Unicode变体,则可以假定它是UTF-8。否则,您必须进行一些猜测以确定它是哪个。那可不好玩
  • 此时,可能是:ASCII、UTF-7、Base64或UTF-16或UTF-32的范围恰好没有使用最高位,并且没有任何空字符
    这不是一个容易解决的问题,通常依靠启发式来对输入编码进行最佳猜测,这可能会被相对无害的输入绊倒——例如,查看和了解更多细节

    如果您正在寻找依赖性最小的仅限Windows的解决方案,可以考虑使用和MLang的组合来尝试字符集检测


    如果你在寻找可移植性,但不要介意在ICU的形式中使用一个相当大的依赖关系,那么你可以利用它的例程来以相同的方式实现同样的事情。

    < P>我编写了一个小型C++库来检测文本文件编码。它使用Qt,但也可以使用标准库轻松实现

    它通过测量符号出现统计信息并将其与不同编码和语言中预先计算的参考值进行比较来进行操作。因此,它不仅检测编码,还检测文本的语言。缺点是必须为目标语言提供预先计算的统计信息,以便正确检测该语言


    您期望的可能编码是什么?是否有一个可能的小集合,或者可能是任何集合?您使用的是什么环境?我认为Linux下有一个可以移植到windows的库来实现这一点;阿尔伯特·佩里恩:顺便说一句,我用的是windows,库的名字是什么?