如何在 Rust 中生成随机 unicode 字符串?

mat*_*usf 1 random unicode rust

我正在实现一个模糊器,我想生成随机的 unicode 字符串。我想出了这个解决方案,但是,它的效率非常低,而且很少产生一些字符串。有没有更好的方法来生成unicode字符串?

谢谢。

use rand::{thread_rng, Error, Rng};
use std::convert::TryFrom;

fn main() -> Result<(), Error> {
    let mut rng = thread_rng();
    let mut arr: Vec<u32> = vec![0; 1024];
    rng.try_fill(&mut arr[..])?;

    println!(
        "{:?}",
        arr.iter()
            .map(|u| char::try_from(*u))
            .flatten()
            .collect::<String>()
    );

    Ok(())
}
Run Code Online (Sandbox Code Playgroud)

Rust 游乐场链接

HHK*_*HHK 5

使用这样的东西:

fn get_random_string(len: usize) -> String {
    rand::thread_rng()
        .sample_iter::<char, _>(rand::distributions::Standard)
        .take(len)
        .collect()
}
Run Code Online (Sandbox Code Playgroud)

操场

如果您想打印它,您可能需要过滤控制字符。此外,字符分布与您在野外可能遇到的任何 UTF-8 字符串非常不同。

  • 如果有人好奇,“sample_iter&lt;char, Standard&gt;”背后的秘密武器是[“Distribution&lt;Char&gt;”特征的实现](https://github.com/rust-random/rand/blob/9555338a270f408913068940f768a312561491f2 /src/distributions/other.rs#L67) 用于“标准”分发类型。 (4认同)