#unicode #grapheme #reader #unicode-text #code-point #text

unicode_reader

包装字节读取器并提供以 Unicode 代码点或字符群形式输出的适配器

5 个版本 (3 个稳定版)

1.0.2 2021年11月19日
1.0.1 2020年6月24日
1.0.0 2019年6月14日
0.1.1 2018年2月7日
0.1.0 2016年9月20日

#864文本处理

Download history 583/week @ 2024-03-13 601/week @ 2024-03-20 806/week @ 2024-03-27 694/week @ 2024-04-03 367/week @ 2024-04-10 308/week @ 2024-04-17 267/week @ 2024-04-24 287/week @ 2024-05-01 388/week @ 2024-05-08 204/week @ 2024-05-15 232/week @ 2024-05-22 237/week @ 2024-05-29 286/week @ 2024-06-05 203/week @ 2024-06-12 154/week @ 2024-06-19 163/week @ 2024-06-26

每月下载量821
14 个crate中使用(9 个直接使用)

MIT/Apache

20KB
243

unicode_reader

Build Status

文档

包装字节读取器并提供以 Unicode 代码点或字符群形式输出的适配器。

与其它以字符串为工作对象的 Unicode 解析器(例如,unicode_segmentation,此项目基于此构建)不同,这个crate在流上工作,不需要将整个数据读入内存。相反,它在读取的同时输出字符或代码点。

extern crate unicode_reader;
use unicode_reader::Graphemes;

use std::io::Cursor;

fn main() {
    let input = Cursor::new("He\u{302}\u{320}llo");
    let mut graphemes = Graphemes::from(input);
    assert_eq!("H",                 graphemes.next().unwrap().unwrap());
    assert_eq!("e\u{302}\u{320}",   graphemes.next().unwrap().unwrap()); // note 3 characters
    assert_eq!("l",                 graphemes.next().unwrap().unwrap());
    assert_eq!("l",                 graphemes.next().unwrap().unwrap());
    assert_eq!("o",                 graphemes.next().unwrap().unwrap());
    assert!(graphemes.next().is_none());

    let greek_bytes = vec![0xCE, 0xA7, 0xCE, 0xB1, 0xCE, 0xAF, 0xCF, 0x81, 0xCE, 0xB5,
                           0xCF, 0x84, 0xCE, 0xB5];
    let mut codepoints = CodePoints::from(Cursor::new(greek_bytes));
    assert_eq!(vec!['Χ', 'α', 'ί', 'ρ', 'ε', 'τ', 'ε'],
                codepoints.map(|r| r.unwrap())
                          .collect::<Vec<char>>());
}

依赖项

~625KB