Se você quiser as codificações UTF-8 dos pontos de código 0 a 0x7FFFFFFF (para o qual o algoritmo de codificação UTF-8 foi originalmente projetado para funcionar):
< /dev/urandom perl -CO -ne '
BEGIN{$/=}
no warnings "utf8";
print chr(unpack("L>",$_) & 0x7fffffff)'
Atualmente, o Unicode é restrito a 0..D7FF, E000..10FFFF (embora alguns desses caracteres não sejam atribuídos, alguns dos quais nunca serão (são definidos como não-caracteres)).
< /dev/urandom perl -CO -ne '
BEGIN{$/=}
no warnings "utf8";
$c = unpack("L>","uconv -x '[:unassigned:]>;'
$_") * 0x10f800 >> 24;
$c += 0x800 if $c >= 0xd800;
print chr($c)'
Se você quer apenas caracteres atribuídos , pode canalizar isso para:
< /dev/urandom perl -CO -ne '
BEGIN{$/=}
no warnings "utf8";
$c = unpack("L>"," if $c =~ /[\p{Space}\p{Graph}]/ && $c !~ /\p{Co}/
$_") * 0x10f800 >> 24;
$c += 0x800 if $c >= 0xd800;
$c = chr $c;
print $c if $c =~ /\P{unassigned}/'
Ou altere para:
< /dev/urandom perl -CO -ne '
BEGIN{$/=}
no warnings "utf8";
print chr(unpack("L>",$_) & 0x7fffffff)'
Você pode preferir:
< /dev/urandom perl -CO -ne '
BEGIN{$/=}
no warnings "utf8";
$c = unpack("L>","uconv -x '[:unassigned:]>;'
$_") * 0x10f800 >> 24;
$c += 0x800 if $c >= 0xd800;
print chr($c)'
Para obter somente gráficos e espaços (exclua os das seções de uso privado).
Agora, para obter 1GiB disso, você pode canalizá-lo para head -c1G
(assumindo o GNU head
), mas cuidado com o último caractere que pode ser cortado no meio.