【问题标题】:OSX Terminal printing question marks when reading from /dev/urandom从 /dev/urandom 读取时,OSX 终端打印问号
【发布时间】:2015-12-07 03:38:20
【问题描述】:

阅读dev/random 给了我很多?s:

$ head -n 1 /dev/random 
???i??0?4?=K?"?0??^Yx??????b"??k?]?JD?Xǀ?ʝֹ??6;?% ???SW#,?z??6?&?V?/7@??H??????Vg?G?Y*Դ?T???[ޘ?fj?|_r?4?-E??"?.?l^u,??'?N?Ƒ???\?v????7S?\ԔJRcɁ??k??Sn?Ԟ?
                                                 ??^?????a?M{?????~??????+???????EC????J̡

这让我觉得?s 是我的终端无法正确显示的字符。我的终端设置为使用 UTF-8 显示。

这是编码的问题吗?还是这是意料之中的,因为随机数可能并不总是对有效字符进行编码?

我的目标是在命令行上轻松生成随机的 Unicode 字符序列。具体来说,每一个有效的Unicode字节序列都应该有一定的非零出现概率,不应该出现无效的Unicode字节序列。

【问题讨论】:

    标签: macos encoding utf-8


    【解决方案1】:

    /dev/random 将返回纯随机数据,而不是 ASCII/UTF 数据。 /dev/random 是一个字节数据流,其中每个字节可能介于 0 到 255 之间。因此,数据将无法在您的终端中正确打印。

    类似的命令:

    head -c 255 /dev/random | openssl base64
    

    会给你ASCII letters and numbers only (Base64 data)。如果您正在寻找随机、有效的 UTF 数据,您将需要编写一些程序来生成随机数(可能通过从/dev/random 读取)并使用该数据来选择随机 UTF 字符。

    类似this answer

    【讨论】:

    • 谢谢。我已经更新了我的问题以指定我的目标。另外,我的终端设置为 UTF-8 编码,而不是 ASCII。
    • @PedroCattori 更新了答案。我想不出一个简单的 oneliner,但我用 python 脚本链接到另一个 Stack Overflow 答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    相关资源
    最近更新 更多