对于检测中文编码,如GBK/BIG5, 长内容可以有很多方法,比如uchardet, chardet之类的函数库。但是对于短内容,比如文件名,用以上函数库,效果并不理想。
经过搜索发现一个有效的库:compact_enc_det.
google/compact_enc_det: compact_enc_det - Compact Encoding Detection (github.com)
此库在预设语言的情况下,很容易检测对应的编码:
const char * Convert2WideChar(const char* src, int nLen)
{
bool is_reliable;
int bytes_consumed;
Encoding encoding = CompactEncDet::DetectEncoding(
src, nLen,
nullptr, nullptr, nullptr,
UNKNOWN_ENCODING,
CHINESE,//UNKNOWN_LANGUAGE,
CompactEncDet::WEB_CORPUS,
false,
&bytes_consumed,
&is_reliable);
switch (encoding)
{
case CHINESE_GB:
return "GBK";
case CHINESE_BIG5:
case CHINESE_BIG5_CP950:
return "BIG5";
default:
return "DEFAULT";
}
}
经过测试通过。如果不设置语言,效果很明显减弱。
915



被折叠的 条评论
为什么被折叠?



