8 个版本
使用旧的 Rust 2015
0.2.3 | 2015 年 2 月 21 日 |
---|---|
0.2.2 | 2015 年 2 月 20 日 |
0.1.3 | 2015 年 2 月 7 日 |
0.1.2 | 2015 年 1 月 29 日 |
#2513 在 算法
27 每月下载量
18KB
263 行
MaybeUtf8 0.2.3
字节容器,可选以 UTF-8 编码。它旨在作为不确定字符编码的字节序列类型,而调用者可能能够确定实际的编码。
例如,ZIP 文件格式最初不支持 UTF-8 文件名,假设存档只会在与原始系统具有相同系统编码的系统上提取。较新的 ZIP 标准支持显式 UTF-8 编码的文件名。在这种情况下,ZIP 库可能希望根据 UTF-8 标志返回一个 String
或 Vec<u8>
。
此包支持两种类型,MaybeUtf8Buf
(类似于 String
)和 MaybeUtf8Slice
(类似于 &str
)。这两种类型都支持各种转换方法。例如,如果您知道字节是使用 ISO 8859-2 编码的,则可以使用 Encoding 将它们转换
use std::borrow::IntoCow;
use encoding::{Encoding, DecoderTrap};
use encoding::all::ISO_8859_2;
use maybe_utf8::{MaybeUtf8Buf, MaybeUtf8Slice};
let namebuf = MaybeUtf8Buf::from_bytes(vec![99,97,102,233]);
assert_eq!(format!("{}", namebuf), "caf\u{fffd}");
// borrowed slice equally works
{
let nameslice: MaybeUtf8Slice = namebuf.to_slice();
assert_eq!(format!("{:?}", nameslice), r#"b"caf\xe9""#);
assert_eq!(nameslice.map_as_cow(|v| ISO_8859_2.decode(&v, DecoderTrap::Replace).unwrap()),
"caf\u{e9}");
}
// consuming an optionally-UTF-8-encoded buffer also works
assert_eq!(namebuf.map_into_str(|v| ISO_8859_2.decode(&v, DecoderTrap::Replace).unwrap()),
"caf\u{e9}");
IntoMaybeUtf8
特性可以用于统一接受字符串或向量来构建 MaybeUtf8*
值。
use maybe_utf8::IntoMaybeUtf8;
assert_eq!("caf\u{e9}".into_maybe_utf8(), b"caf\xc3\xa9".into_maybe_utf8());
完整文档 可用。
MaybeUtf8 由 Kang Seonghoon 编写,并许可在 MIT/X11 许可证下。