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

How to generate random unicode strings in 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(())
}

Rust Playground link

使用这样的东西:

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

Playground

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