之前使用Qt 显示中文乱码 查了一堆资料 都是写如果转换编码的 但是转换编码当然知道 问题是如何知道当前文件编码 后来想到用notepad++ 好像可以自动检测编码 所以就去找了notepad++源码来看,最后终于找到了
检测编码是通过 uchardet相关的函数进行检测的
上图中返回的cs 就是字符的编码名称 例如返回 gb2312
返回空好像是ascii 这个到没有细研究
源码附件:https://download.csdn.net/download/qq_35665222/11774910
使用时需要将文件夹内所有文件添加进项目,然后include uchardet.h这个文件
这里说一下许可证是MPL 1.1/GPL 2.0/LGPL 2.1,如果看重许可证可以使用LGPL将文件封装为动态库 避免感染到自己的项目
使用方法 :
uchardet_t ud = uchardet_new();
uchardet_handle_data(ud, buf, len);
uchardet_data_end(ud);
const char* cs = uchardet_get_charset(ud);
uchardet_delete(ud);
buf 表示文件内容
len 表示文件长度
cs表示编码名称 如果想要转化为编码页 可以使用EncodingMapper这个类