uchardet-git
本 README 由 AI 撰写。
uchardet 是一个用于检测未知字符编码的 Rust 库,它简单封装了 uchardet C++ 库。 该库能够分析字节流,并返回可能的编码名称及置信度,同时可选支持将结果映射到 encoding_rs 中定义的 Web 兼容编码。
特性
-
检测字节流的编码,返回编码名称(如
"UTF-8","GB18030"); -
获取多个候选编码及其置信度;
-
(可选)通过
encoding特性支持将检测结果转换为encoding_rs::Encoding,便于后续编解码;[!IMPORTANT] 注意
encoding_rs遵循 WHATWG 标准,而uhardet返回的编码名称实际上是 GNUlibiconv兼容的。大部分情况下,这没有问题,但有以下两点需注意:-
将检测结果转换为
encoding_rs::Encoding时,可能会得到None; -
一些编码(据我所知,它们是
ISO-8859-1和EUC-KR)可以转换为encoding_rs::Encoding, 但使用encoding_rs解码可能会得到错误结果。只考虑 GNU
libiconv能以uchardet的检测结果正确解码字节流的情况:检测结果 对应 Encoding差异说明 ISO-8859-1windows-1252在 GNU libiconv定义下,两者并不等价。EUC-KReuc-kr名称相同,但 encoding_rs可能与 GNUlibiconv定义有差异。
-
-
(可选)通过
auto_encoding_reader特性提供自动检测并转换为 UTF-8 的读取器AutoEncodingReader;[!IMPORTANT] 它不会处理如上所述的问题。
-
从捆绑源码编译
uchardet库(需 CMake 和 C++ 编译器)。[!IMPORTANT] 编译过程未经广泛测试。
使用示例
use detect_encoding_name;
let data = &;
let encoding = detect_encoding_name.expect;
assert_eq!;
// 启用 `encoding` 特性后,可返回 `encoding_rs::Encoding`
自动转码 Reader(需启用 auto_encoding_reader 特性)
高级用法
use CharsetDetector;
let mut detector = new;
detector.feed_data.unwrap;
detector.feed_data.unwrap;
let candidates = detector.detect;
for cand in &candidates
安装
在 Cargo.toml 中添加:
[]
= "0.0.6"
默认开启 encoding 和 auto_encoding_reader 特性,如需禁用:
= { = "0.0.6", = false }
构建脚本会自动编译项目内 uchardet-git-sys/uchardet 子模块中的源码。编译需要以下工具:
- Rust 和 Cargo
- C++ 编译器(如
g++,clang++或 MSVC) - CMake ≥ 3.5
编译过程未经广泛测试。
许可证
本项目采用 MIT 许可证。详情参见 LICENSE 文件。
鸣谢
- 原始 C++ 库 uchardet 的开发者。
- 本 Rust 包装受到 rust-uchardet 早期版本的启发。