NotePad++是怎么判断文件换行符格式和编码格式的?

文件:Buffer.cpp

功能:判断文件的换行符格式

函数:static EolType getEOLFormatForm(const char* const data, size_t length, EolType defvalue = EolType::osdefault)

{

​    循环字符

​    {

​        如果字符是cr

​            如果下一个字符是lf

​                是win格式

​            否则

​                是macos格式

​        如果是字符是lf

​            是unix格式

​    }

​    是未知格式

}

函数:bool FileManager::loadFileData

{

​    判断文件的BOM情况

​    无BOM情况下使用uchardet库判断字符编码

}

功能:判断文件的编码格式

函数:int FileManager::detectCodepage(char* buf, size_t len)

{
    int codepage = -1;
    uchardet_t ud = uchardet_new();
    uchardet_handle_data(ud, buf, len);
    uchardet_data_end(ud);
    const char* cs = uchardet_get_charset(ud);
    if (stricmp(cs, "TIS-620") != 0) // TIS-620 detection is disabled here because uchardet detects usually wrongly UTF-8 as TIS-620
        codepage = EncodingMapper::getInstance().getEncodingFromString(cs);
    uchardet_delete(ud);
    return codepage;
}

文件:Utf8_16.cpp

功能:判断文件的BOM情况

函数:UniMode Utf8_16_Read::determineEncoding(const unsigned char *buf, size_t bufLen)

{

​    判断UTF-16 big-endian with BOM

​    判断UTF-16 little-endian with BOM

​    判断UTF-8 with BOM

​    不是带BOM文件格式

}
 

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值