C ++如何检索文件BOM以获得其编码类型?

时间:2015-01-21 21:21:31

标签: c++ encoding utf-8

我不知道它是否可能,但有没有办法检索文件的前4个字节(很可能是BOM)以获得其编码类型(UTF-8,UTF-16LE) ,CP1252等...)。然后,如果选择的文件是以UTF-8编码的,则在数组中找到的值" tabBytes []"会是这样的:

    tabBytes[0] = 0xEF
    tabBytes[1] = 0xBB
    tabBytes[2] = 0xBF
    tabBytes[3] = XXXX

感谢您抽出宝贵时间帮助我!我期待着阅读你的意见和答案。

编辑:我是C ++的新手,所以我之前编写的代码可能不对,因此我删除了它。

最终编辑:最后我找到了解决问题的方法,感谢那些帮助我的人!

1 个答案:

答案 0 :(得分:4)

数组索引从0开始,因此您使用buffer[fourBytes] = '\0';写入缓冲区的末尾。如果要这样做,则需要分配fourBytes + 1个字节。这应该可以阻止您在删除缓冲区时遇到的崩溃。

然而,像这样的空终止缓冲区的唯一原因是,如果你想把它当作C风格的字符串(例如将其打印出来),你似乎并没有这样做。您已将其复制到tabBytes,但您复制空终结符。因此,目前还不清楚你正在努力实现的目标。

从文件中读取前几个字节的整体逻辑很好。虽然基于上面的代码,您可以直接将数据读入tabBytes并取消buffer的分配/复制/免费。