识别字符串(是或)是否可能是UTF-8编码的最佳方法是什么?Win32 API IsTextUnicode
在这里没有多大帮助.此外,该字符串将不具有UTF-8 BOM,因此无法检查.并且,是的,我知道只有ASCII范围以上的字符才会被编码超过1个字节.
由FireFox中使用的Mozilla开发的chardet字符集检测.源代码
jchardet是来自mozilla自动字符集检测算法的源码的java端口.
NCharDet是Mozilla和FireFox浏览器中使用的C++ Java端口的.Net(C#)端口.
代码项目C#示例,它使用Microsoft的MLang进行字符编码检测.
UTRAC是一个用c ++编写的命令行工具和库,用于检测字符串编码
cpdetector是一个用于编码检测的java项目
chsdet是一个delphi项目,是一个独立的可执行模块,用于检测给定文本或文件的自动字符集/编码.
另一个有用的帖子指向很多库来帮助你确定字符编码http://fredeaker.blogspot.com/2007/01/character-encoding-detection.html
您还可以查看相关问题当BOM(字节顺序标记)丢失时,如何最好地猜测编码?,它有一些有用的内容.
没有真正可靠的方法,但基本上,随机字节序列(例如标准8位编码中的字符串)不太可能是有效的UTF-8字符串(如果设置了字节的最高位,关于在UTF-8中可以遵循什么类型的字节,有非常具体的规则,您可以尝试将字符串解码为UTF-8,并且如果没有解码错误则认为它是UTF-8.
确定是否存在解码错误是另一个问题,许多Unicode库只是用问号替换无效字符而不指示是否发生错误.因此,您需要一种明确的方法来确定解码时是否发生错误.
此W3C页面具有用于验证UTF-8的perl正则表达式