读取字符类型未知的文件

用户名

我需要从可能含有任何类型的字符(文件中读取文本charchar8_twchar_t,等)。如何确定使用哪种类型的字符并basic_ifstream<char_type>根据该类型创建实例

普拉平

因此,我想您想自动检测未知文本文件的编码。

这不可能以100%可靠的方式进行。但是,我的经验表明,在大多数实际情况下,您可以实现很高的可靠性(> 99.99%)。文件越大,猜测其编码越可靠:通常,十分之几字节就足以使您对猜测充满信心。

有效的Unicode代码点是从U + 1到U + 10FFFF的值,不包括替代范围U + D800到U + DFFF。代码点U + 0实际上是有效的,但排除它会大大减少误判的可能性(NUL字节永远不会出现在任何实际的文本文件中)。为了更好的猜测,我们可以排除一些非常罕见的控制字符。

这是我建议的算法:

  • 如果文件以有效BOM(UTF-8,UTF-16BE / LE,UTF-32BE / LE)开头,请信任该BOM。
  • 如果文件仅包含ASCII字符(非空字节<128),则将其视为ASCII(使用char)。
  • 如果文件是有效的UTF-8,则假定它是UTF-8(使用char8_t,但char也可以使用)。请注意,ASCII是UTF-8的子集,因此可以绕过先前的检查。
  • 如果文件是有效的UTF-32(同时检查小端和大端版本),则假定使用UTF-32(char32_t,也可能wchar_t在Linux或macOS上)。如果需要,请交换字节。
  • 如果文件是有效的UTF-16(同时检查小端和大端版本),包括对代理对的限制,并且偶数或奇数字节之间的相关性高于所有字节之间的相关性,则假定UTF-16(char16_t,也可能wchar_t在视窗)。如果需要,请交换字节。
  • 否则,该文件可能未采用某些Unicode编码,并且可能会使用旧的代码页。祝您自动检测到哪一个好运。到目前为止,最常见的一种是8859-1(Latin-1)char也可能是一些原始二进制数据。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从文件C ++读取字符

来自分类Dev

从未知长度的文件中读取字符串的函数

来自分类Dev

从文件C ++读取字符串

来自分类Dev

Xcode从C ++文件中读取字符

来自分类Dev

从文件中读取字符串

来自分类Dev

无法从dbf文件读取字符串(但可以正确读取Number类型的数据)Java,DBFReader

来自分类Dev

通过读取字符串检测数据类型

来自分类Dev

浓咖啡读取字符串文件值

来自分类Dev

在C中从文件读取字符串输入

来自分类Dev

从输入文件SAS读取字符串

来自分类Dev

Java从文本(txt)文件中读取字符串

来自分类Dev

跳过从数据文件C ++读取字符

来自分类Dev

Bazel-如何从环境文件读取字符串?

来自分类Dev

从文件读取字符串返回nil

来自分类Dev

从输入文件SAS读取字符串

来自分类Dev

使用C代码从文件中读取字符

来自分类Dev

PHP,读取字符串的文本文件

来自分类Dev

从文件中读取字符串和整数

来自分类Dev

目标C:从CSV文件中读取字符串

来自分类Dev

读取字符串后加载xml文件

来自分类Dev

从 app.config 文件中读取字符串

来自分类Dev

从java中的linux设备字符文件中读取字节

来自分类Dev

从原始txt文件中读取字符串

来自分类Dev

如何从整数之前的文件中读取字符串

来自分类Dev

如何在文本文件中读取字符并获取字符长度?

来自分类Dev

熊猫read_table读取混合类型的读取字符串为十六进制

来自分类Dev

熊猫read_table读取混合类型的读取字符串为十六进制

来自分类Dev

读取编码未知的文件

来自分类Dev

读取编码未知的文件