#windows #pages #codec #string #decode #decoding #encoding

codepage-strings

为 Windows 字符集编码字符串进行编码/解码

3 个稳定版本

1.0.2 2022年1月29日
1.0.1 2021年3月15日

#145 in 国际化 (i18n)


用于 ebustl

MIT 许可证

16KB
186

Maintenance CI crates-io api-docs dependency status

codepage-strings:为 Windows 字符集编码字符串进行编码/解码

Bart Massey 2021 (版本 1.0.2)

此 Rust 包建立在 encoding_rscodepageoem-cp 等出色的包的基础上,旨在提供符合 Rust 风格的 Windows 字符集编码和解码。

由于 Windows 字符集是历史遗留问题,使用它们进行字符串转换比较困难。遗憾的是,仍然有很多文件使用这些编码。此包专门为与 RIFF 文件格式一起使用而创建,该格式包含用于文本国际化的字符集。

除了 codepageoem-cp 支持的字符集外,没有对 Windows 字符集进行额外处理。如果缺少所需的单字节字符集,建议将其添加到 oem-cp,这似乎是主要的 Rust 非常规 Windows 字符集表仓库。我相信这里处理了大多数 iconv 支持的单字节字符集,但我还没有仔细检查。

除了 UTF-16LE 和 UTF-16BE 之外,目前不支持多字节 Windows 字符集——特别是各种亚洲语言。字符集 65001 (UTF-8) 支持作为身份转换。UTF-32LE 和 UTF32-Be 不支持。EBCDIC 字符集和 UTF-7 不支持,且优先级较低,因为真的需要吗?

没有特别关注性能。该接口在一定程度上允许 std::borrow::Cow,但这受到 encoding_rsoem-cp 之间的小阻抗不匹配的限制。

示例

在Windows代码页869(另一种希腊语)上执行一些字符串转换。

let coding = Coding::new(869)?;
assert_eq!(
    coding.encode("αβ")?,
    vec![214, 215],
);
assert_eq!(
    coding.decode(&[214, 215])?,
    "αβ",
);
assert_eq!(
    coding.decode_lossy(&[214, 147]),
    "α\u{fffd}",
);
assert_eq!(
    coding.decode(&[214, 147]),
    Err(ConvertError::StringDecoding),
);

本软件包在 "MIT 许可证" 下提供。请参阅本分发中的 LICENSE 文件以了解许可证条款。

感谢 cargo-readme 软件包生成此 README

依赖关系

~4.5MB
~133K SLoC