#字符编码 #编解码器 #字符集 #页面 #OEM #解码

yore

Rust库,用于根据OEM代码页解码/编码字符集

10个版本 (4个稳定版)

1.1.0 2023年7月26日
1.0.2 2023年4月22日
1.0.1 2022年11月2日
0.3.3 2022年1月18日
0.1.0 2021年7月2日

#393 in 编码

Download history 115/week @ 2024-04-07 167/week @ 2024-04-14 167/week @ 2024-04-21 385/week @ 2024-04-28 159/week @ 2024-05-05 227/week @ 2024-05-12 166/week @ 2024-05-19 528/week @ 2024-05-26 476/week @ 2024-06-02 396/week @ 2024-06-09 545/week @ 2024-06-16 639/week @ 2024-06-23 706/week @ 2024-06-30 434/week @ 2024-07-07 553/week @ 2024-07-14 341/week @ 2024-07-21

2,044 每月下载量
用于 5 crate

MIT 许可证

1MB
32K SLoC

Yore

基于OEM代码页进行解码和编码字符集的Rust库。

yore at crates.io yore at docs.rs

功能

  • 快速性能 *
  • 使用Cowshrink_to_fit最小化内存使用
  • 易于使用的API
  • 广泛支持的代码页
  • 处理重新定义ASCII字符的代码页,例如CP864中的'٪'字符

用法

yore添加到您的Cargo.toml文件。

[dependencies]
yore = "1.1.0"

示例

使用特定代码页

use yore::code_pages::{CP857, CP850};
use yore::{DecodeError, EncodeError};

// Vec contains ASCII "text"
let bytes = vec![116, 101, 120, 116];
// Vec contains ASCII "text " and codepoint 231
let bytes_undefined = vec![116, 101, 120, 116, 32, 231]; 

// Notice that decoding CP850 can't fail because it is completely defined
assert_eq!(CP850.decode(&bytes), "text");

// However, CP857 can fail
assert_eq!(CP857.decode(&bytes).unwrap(), "text");

// "text " + codepoint 231 
assert!(matches!(CP857.decode(&bytes_undefined), DecodeError));

// Lossy decoding won't fail due to fallback
assert_eq!(CP857.decode_lossy(&bytes_undefined), "text �");

// Encoding
assert_eq!(CP850.encode("text").unwrap(), bytes);
assert!(matches!(CP850.encode("text 🦀"), EncodeError));
assert_eq!(CP850.encode_lossy("text 🦀", 231), bytes_undefined);

使用特质对象

use yore::CodePage;
fn do_something(code_page: &dyn CodePage, bytes: &[u8]) {
    println!("{}", code_page.decode(bytes).unwrap());
}

支持的代码页

标识符 名称 描述
437 ibm437 OEM美国
737 ibm737 OEM希腊(以前为437G);希腊(DOS)
775 ibm775 OEM波罗的海;波罗的海(DOS)
850 ibm850 OEM多语言拉丁1;西欧(DOS)
852 ibm852 OEM拉丁2;中欧(DOS)
855 ibm855 OEM西里尔文(主要是俄语)
857 ibm857 OEM土耳其;土耳其(DOS)
860 ibm860 OEM葡萄牙;葡萄牙(DOS)
861 ibm861 OEM冰岛;冰岛(DOS)
862 dos-862 OEM希伯来;希伯来(DOS)
863 ibm863 OEM法语加拿大;法语加拿大(DOS)
864 ibm864 OEM阿拉伯;阿拉伯(864)
865 ibm865 OEM北欧;北欧(DOS)
866 cp866 OEM俄语;西里尔文(DOS)
869 ibm869 OEM现代希腊;希腊,现代(DOS)
874 windows-874 泰语(Windows)
910 ibm910 IBM-PC APL2
1250 windows-1250 ANSI中欧;中欧(Windows)
1251 windows-1251 ANSI西里尔文;西里尔文(Windows)
1252 windows-1252 ANSI拉丁1;西欧(Windows)
1253 windows-1253 ANSI希腊;希腊(Windows)
1254 windows-1254 ANSI土耳其;土耳其(Windows)
1255 windows-1255 ANSI希伯来;希伯来(Windows)
1256 windows-1256 ANSI阿拉伯;阿拉伯(Windows)
1257 windows-1257 ANSI波罗的海;波罗的海(Windows)
1258 windows-1258 ANSI/OEM越南;越南(Windows)

* 基准测试

encoding_rs 只支持 oem_cpyore 所支持的一些编码。此外,encoding_rs 主要关注流式使用场景。

有关更多详细信息,请参阅 bench crate

依赖关系

~290–750KB
~18K SLoC