C++ 文本编码探测CED (Compact Encoding Detection)技术
一、CED
CED 全称 Compact Encoding Detection, 是由谷歌开源的C++库,用于扫描原始字节和检测最相近的文本编码。 它是通过不同的编码规则来检测的,因此,对于输入字数少且字节规则相似或重叠的文本不可避免地会有一定概率的失误。
二、代码示例
1. 编译源码
-
下载 源码 安装 进行编译
# 解压并进入源码目录 cd compact_enc_det # 生成VS 2015的项目,如需其他选项见CMake帮助文档 cmake . -G "Visual Studio 14 2015"
-
打开CED.sln,选择对应的Release Win32进行Build构建即可在libRelease生成lib库
对于不需要google test的用户,可以注释掉CMakeLists.txt的以下内容
if (NOT EXISTS "gtest") ... endif() # Configure gtest. execute_process(COMMAND ${CMAKE_COMMAND} . WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/gtest)
以及
set(GTEST_INCLUDE_DIR "gtest/googletest/include") set(GTEST_LIB_DIR "${CMAKE_SOURCE_DIR}/gtest/lib") set(CED_UNITTEST_SOURCES ... ) add_executable(ced_unittest ${CED_UNITTEST_SOURCES}) include_directories(${CMAKE_SOURCE_DIR}/${GTEST_INCLUDE_DIR}) if (WIN32) ... else() ... endif()
2. 示例演示
-
新建控制台项目 选择项目>属性>配置属性(本例为Rlease WIN32)
C/C++ >常规>附加包含目录:添加头文件路径,如 D:compact_enc_det 链接器>常规>附加库目录:添加lib文件路径,如 D:compact_enc_detlibRelease 链接器>输入>附加依赖项:添加lib库名,如 ced.lib C/C++ >代码生成->运行库:选择 Multi-threaded (/MT)
-
编写代码
#include "stdafx.h" #include "compact_enc_det/compact_enc_det.h" #include <iostream> int main() { const char* text = "我喜欢你"; bool is_reliable; int bytes_consumed; Encoding encoding = CompactEncDet::DetectEncoding( text, strlen(text), nullptr, nullptr, nullptr, UNKNOWN_ENCODING, UNKNOWN_LANGUAGE, CompactEncDet::WEB_CORPUS, false, &bytes_consumed, &is_reliable); std::cout << "Text encoding is " << encoding << std::endl; return 0; }
三、总结
CED是一个相对可靠的国际化消息编码检测组件,可以帮助我们在国际项目中判别服务端返回的是什么编码,从而实现编码的转换,当然,现代化的软件系统编码很多都是UTF-8的,但为了兼容老系统,可以扩展此项功能。
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
前端学习之表单验证(超详细)