fopen识别文本编码的问题

啦啦啦啦啦啦 2024-01-31 20:55:27

Windows平台的fopen设定了unicode模式是能识别BOM的,那有什么函数能从打开的FILE获取他到底是什么编码?

...全文
184 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

二进制打开判断都几个字符,如果不是明确的BOM,就只能根据内容猜了,尝试转一下,如果没有出错就可能是对的。

  • 打赏
  • 举报
回复

下面的代码可以区分Unicode、UTF-8-BOM、ANSI编码:

#include <fstream>
#include <iostream>
using namespace std;
int main()
{
    ifstream fin("D:/project/c1/1.txt", ios::binary);
    unsigned char s2;
    fin.read((char *)&s2, sizeof(s2));
    int p = s2 << 8;
    fin.read((char *)&s2, sizeof(s2));
    p += s2;
    string code;
    switch (p)
    {
    case 0xfffe:
        code = "Unicode"; // UCS-2 Little Endian编码
        break;
    case 0xfeff:
        code = "Unicode big endian"; // UCS-2 Big Endian编码
        break;
    case 0xefbb:
        code = "UTF-8"; // UTF-8-BOM编码
        break;
    default:
        code = "ANSI";
        break;
    }
    fin.close();
    cout << "file's encoding:" << code << endl;
    return 0;
}

64,849

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧