我需要从可能含有任何类型的字符(文件中读取文本char
,char8_t
,wchar_t
,等)。如何确定使用哪种类型的字符并basic_ifstream<char_type>
根据该类型创建实例?
因此,我想您想自动检测未知文本文件的编码。
这不可能以100%可靠的方式进行。但是,我的经验表明,在大多数实际情况下,您可以实现很高的可靠性(> 99.99%)。文件越大,猜测其编码越可靠:通常,十分之几字节就足以使您对猜测充满信心。
有效的Unicode代码点是从U + 1到U + 10FFFF的值,不包括替代范围U + D800到U + DFFF。代码点U + 0实际上是有效的,但排除它会大大减少误判的可能性(NUL字节永远不会出现在任何实际的文本文件中)。为了更好的猜测,我们可以排除一些非常罕见的控制字符。
这是我建议的算法:
char
)。char8_t
,但char
也可以使用)。请注意,ASCII是UTF-8的子集,因此可以绕过先前的检查。char32_t
,也可能wchar_t
在Linux或macOS上)。如果需要,请交换字节。char16_t
,也可能wchar_t
在视窗)。如果需要,请交换字节。char
。也可能是一些原始二进制数据。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句