| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 596 人关注过本帖
标题:代码缺少函数
只看楼主 加入收藏
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:406
专家分:190
注 册:2021-4-9
结帖率:97.26%
收藏
 问题点数:0 回复次数:0 
代码缺少函数
像个无头苍蝇似的,在网上飞来飞去。。。
终于找到了一个可以识别 文本5种编码(ANSI, UTF16_LE, UTF16_BE, UTF8_BOM, UTF8 )的程序了。。。。

可最后,发现程序不完整。
我现在的水平,不可能修复这个程序,所以向大家来求助。。。。。。。。
图片附件: 游客没有浏览图片的权限,请 登录注册



找不到 FILE_READER函数。。。
是自定义函数,还是哪一个库里的函数

程序代码:
enum Encode { ANSI = 1, UTF16_LE, UTF16_BE, UTF8_BOM, UTF8 };
__inline static
Encode IsUtf8Data(const uint8_t* data, size_t size)
{
    bool bAnsi = true;
    uint8_t ch = 0x00;
    int32_t nBytes = 0;
    for (auto i = 0; i < size; i++)
    {
        ch = *(data + i);
        if ((ch & 0x80) != 0x00)
        {
            bAnsi = false;
        }
        if (nBytes == 0)
        {
            if (ch >= 0x80)
            {
                if (ch >= 0xFC && ch <= 0xFD)
                {
                    nBytes = 6;
                }
                else if (ch >= 0xF8)
                {
                    nBytes = 5;
                }
                else if (ch >= 0xF0)
                {
                    nBytes = 4;
                }
                else if (ch >= 0xE0)
                {
                    nBytes = 3;
                }
                else if (ch >= 0xC0)
                {
                    nBytes = 2;
                }
                else
                {
                    return Encode::ANSI;
                }
                nBytes--;
            }
        }
        else
        {
            if ((ch & 0xC0) != 0x80)
            {
                return Encode::ANSI;
            }
            nBytes--;
        }
    }
    if (nBytes > 0 || bAnsi)
    {
        return Encode::ANSI;
    }
    return Encode::UTF8;
}
__inline static

Encode DetectEncode(const uint8_t* data, size_t size)
{
    if (size > 2 && data[0] == 0xFF && data[1] == 0xFE)
    {
        return Encode::UTF16_LE;
    }
    else if (size > 2 && data[0] == 0xFE && data[1] == 0xFF)
    {
        return Encode::UTF16_BE;
    }
    else if (size > 3 && data[0] == 0xEF && data[1] == 0xBB && data[2] == 0xBF)
    {
        return Encode::UTF8_BOM;
    }
    else
    {
        return IsUtf8Data(data, size);
    }
}



auto s = FILE_READER(sv.begin()->c_str(), std::ios::binary);

switch (DetectEncode((const uint8_t*)s.data(), s.size()))
{
case ANSI:
    break;
case UTF16_LE:
    s.erase(s.begin());
    s.erase(s.begin());
    s = StringConvertUtils::Instance()->WToA(std::wstring((const wchar_t*)s.data(), s.length() / sizeof(wchar_t)));
    break;
case UTF16_BE:
    s.erase(s.begin());
    s.erase(s.begin());
    s = StringConvertUtils::Instance()->WToA(std::wstring((const wchar_t*)s.data(), s.length() / sizeof(wchar_t)));
    break;
case UTF8_BOM:
    s.erase(s.begin());
    s.erase(s.begin());
    s.erase(s.begin());
    s = StringConvertUtils::Instance()->WToA(StringConvertUtils::Instance()->UTF8ToW(s));
    break;
case UTF8:
    s = StringConvertUtils::Instance()->WToA(StringConvertUtils::Instance()->UTF8ToW(s));
    break;
default:
    break;
}

搜索更多相关主题的帖子: erase begin data return size 
2022-09-10 20:59
快速回复:代码缺少函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.088254 second(s), 12 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved