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 编码
每月下载量 127,860
用于 91 个 包(10 个直接使用)
49KB
773 行
charset
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.io
和 java.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 功能 serde
为 Charset
启用 Serde 支持。
最低 Rust 版本
MSRV 依赖于 encoding_rs
和 base64
依赖项;不依赖于此软件包。当前的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