6 个版本

0.1.5 2024年7月21日
0.1.4 2024年7月21日
0.1.3 2021年11月28日
0.1.2 2018年12月2日
0.1.1 2018年11月17日

#186 in 编码

Download history 22969/week @ 2024-04-26 28466/week @ 2024-05-03 25966/week @ 2024-05-10 24105/week @ 2024-05-17 23543/week @ 2024-05-24 25143/week @ 2024-05-31 21767/week @ 2024-06-07 21643/week @ 2024-06-14 23807/week @ 2024-06-21 22593/week @ 2024-06-28 24075/week @ 2024-07-05 23466/week @ 2024-07-12 30000/week @ 2024-07-19 31146/week @ 2024-07-26 32074/week @ 2024-08-02 28562/week @ 2024-08-09

每月下载量 127,860
用于 91 包(10 个直接使用)

Apache-2.0 OR MIT

49KB
773

charset

crates.io docs.rs Apache-2.0 OR MIT dual-licensed

charset 是对 encoding_rs 的封装,它提供了对在 电子邮件 中出现的字符编码的解码(非流式),除了提供对 UTF-7 的解码外,还包括由 编码标准 (并由 encoding_rs 提供)定义的编码。

注意: 请勿使用此包来消费 Web 内容。出于安全原因,消费 Web 内容的用户 禁止 支持 UTF-7。当消费 Web 内容时,请直接使用 encoding_rs

UTF-7 和编码标准中定义的编码集合被认为适用于消费电子邮件,因为这是 Thunderbird 支持的编码集合。此外,基于 Firefox OS 电子邮件客户端的经验,认为 UTF-7 支持是必要的。实际上,虽然此包中的 UTF-7 实现独立于 Thunderbird 的 UTF-7 实现,但 Thunderbird 使用 encoding_rs 来解码其他编码。除了编码标准中定义的标签外,此包还识别了额外的 java.iojava.nio 名称,以与 JavaMail 兼容。对于 UTF-7,识别了 IANA 和 Netscape 4.0 标签。

已知的兼容性限制(来自 Thunderbird 错误报告的已知信息)

  • 由于此包不支持 HZ,因此可能无法解码一些古老的中文 Usenet 帖子。
  • 由于此包不支持 ISO-2022-CN,因此可能无法解码本世纪初在 Solaris 上使用 Sun 的 CDE 电子邮件客户端发送的一些中文电子邮件。
  • 由于此包不支持 ISO-2022-KR,因此可能无法解码 IBM/Lotus Notes 发送的一些韩文电子邮件。

此软件包有意不支持将内容编码到旧版编码。发送电子邮件时,始终使用UTF-8。也就是说,对.as_bytes()进行调用,并对&str的内容进行标记,标记为UTF-8

版本 1.0

从逻辑上讲,此软件包应该是1.0版本,但如果没有实际的API断裂,那么进行版本号semver断裂不值得麻烦。期望是在encoding_rs 1.0到来时进行1.0版本。

许可

Apache-2.0 OR MIT;请参阅名为COPYRIGHT的文件。

API 文档

生成的API 文档可在网上查看。

安全考虑

再次强调,此软件包用于电子邮件。请勿将其用于Web内容。

切勿尝试对ASCII不兼容编码中的未解码数据进行任何安全分析,特别是对UTF-7。始终先解码后分析。UTF-7允许将不需要表示为base64的字符表示为base64。此外,为了与Thunderbird保持一致,此软件包中的UTF-7解码器允许例如ASCII控制字符在不进行base64编码的情况下表示,即使规范说明它们应该进行base64编码。

该实现的设计是非恒定时间的。可以观察到输入长度和解码所需时间的攻击者可以猜测不同范围内的字符的相对比例。猜测ASCII与非ASCII的比例应该是特别可行的。

Serde 支持

cargo 功能 serdeCharset 启用 Serde 支持。

最低 Rust 版本

MSRV 依赖于 encoding_rsbase64 依赖项;不依赖于此软件包。当前的MSRV似乎是1.47.0。此软件包不会为 base64 的semver提升进行semver提升。

免责声明

这是一个个人项目。它有Mozilla版权声明,因为我从encoding_rs复制粘贴了内容。您不应该对Mozilla的名称出现有任何更多的解读。

发行说明

0.1.5

  • bincode(仅限开发依赖项)更新到1.3.3。

0.1.4

  • base64更新到0.22.1。
  • encoding_rs更新到0.8.34。
  • 此软件包现在是一个no_std + alloc软件包。
  • 添加了对java.io和java.nio名称的支持,以适应JavaMail
    • ISO-8859-N系列以iso8859_N的形式呈现,除了10、11、14和16(在JavaMail中没有证据表明存在)和8(在JavaMail中不清楚是否为视觉或逻辑,即使实际上是由JavaMail发送)。
    • CJK和Thai Windows代码页编号以ms(以及950还附加_hkscs)开头。
    • EUC变体(包括CN,即GBK)和KOI带有下划线:euc_jp、euc_kr、euc_cn、koi8_r和koi8_u。
    • Windows代码页编号874、949、950以x-windows-开头。
    • tis620和iso2022jp不带连字符。
  • 添加了UTF-7的IANA和Netscape 4.0别名。

0.1.3

  • base64更新到0.13.0。

0.1.2

  • Charset实现了From<&'static Encoding>
  • 添加了可选的Serde支持。

0.1.1

  • 添加了decode_ascii()
  • 添加了decode_latin1()

0.1.0

初始发布。

依赖项

~3.5MB
~126K SLoC