#utf-8 #container #string

nightly maybe_utf8

可选以 UTF-8 编码的字节容器

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 每月下载量

MIT 许可证

18KB
263

MaybeUtf8 0.2.3

MaybeUTF8 on Travis CI

字节容器,可选以 UTF-8 编码。它旨在作为不确定字符编码的字节序列类型,而调用者可能能够确定实际的编码。

例如,ZIP 文件格式最初不支持 UTF-8 文件名,假设存档只会在与原始系统具有相同系统编码的系统上提取。较新的 ZIP 标准支持显式 UTF-8 编码的文件名。在这种情况下,ZIP 库可能希望根据 UTF-8 标志返回一个 StringVec<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 许可证下。

无运行时依赖