C++ 文本编码探测CED (Compact Encoding Detection)技术

35 篇文章 2 订阅

C++ 文本编码探测技术 - 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构建即可在\lib\Release生成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)
  1. C/C++ >常规>附加包含目录:添加头文件路径,如 D:\compact_enc_det
  2. 链接器>常规>附加库目录:添加lib文件路径,如 D:\compact_enc_det\lib\Release
  3. 链接器>输入>附加依赖项:添加lib库名,如 ced.lib
  4. 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的,但为了兼容老系统,可以扩展此项功能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值