Como faço para encontrar o comprimento de uma seqüência de caracteres Unicode em Perl?
operldoc
página paracomprimento() me diz que eu deveria usarbytes::length(EXPR)
para encontrar uma string Unicode em bytes oubytes página ecoa isso.
use bytes;
$ascii = 'Lorem ipsum dolor sit amet';
$unicode = 'Lørëm ípsüm dölör sît åmét';
print "ASCII: " . length($ascii) . "\n";
print "ASCII bytes: " . bytes::length($ascii) . "\n";
print "Unicode: " . length($unicode) . "\n";
print "Unicode bytes: " . bytes::length($unicode) . "\n";
A saída deste script, no entanto, não está de acordo com a página do manual:
ASCII: 26
ASCII bytes: 26
Unicode: 35
Unicode bytes: 35
Parece-me que length () e bytes :: length () retornam o mesmo para as cadeias ASCII e Unicode. Eu tenho meu editor definido para gravar arquivos como UTF-8 por padrão, então eu acho que Perl está interpretando todo o script como Unicode - isso significa que comprimento () automaticamente manipula seqüências de caracteres Unicode corretamente?
Editar: Veja meu comentário; minha pergunta não faz muito sentido, porque length () énão trabalhando "corretamente" no exemplo acima - ele está mostrando o comprimento da string Unicode em bytes, não caracteres. A reson que eu originalmente deparei com isso é para um programa no qual eu preciso definir o cabeçalho Content-Lenth (em bytes) em uma mensagem HTTP. Eu tinha lido em Unicode em Perl e estava esperando ter que fazer alguma fantasia para fazer as coisas funcionarem, mas quando length () retornou exatamente o que eu precisava, fiquei confuso! Veja a resposta aceita para uma visão geral deuse utf8
, use bytes
eno bytes
em Perl.