Como programador C, fiquei surpreso ao ver que wc -c
(que conta o número de bytes) e wc -m
(que conta o número de caracteres) produz resultados muito diferentes para um longo arquivo de texto meu. Sempre me disseram que sizeof(char)
é 1 byte.
qdii@nomada ~/Documents $ wc -c sentences.csv
102990983 sentences.csv
qdii@nomada ~/Documents $ wc -m sentences.csv
89023123 sentences.csv
Alguma explicação?
character-encoding
locale
wc
qdii
fonte
fonte
Respostas:
O
char
tipo em C é de um byte, mas é destinado a caracteres ASCII; existem codificações de largura variável, como UTF-8, que podem ocupar muitos bytes por caractere.wc
usa ambrtowc(3)
função para decodificar seqüências multibyte, dependendo do código de idioma definido pelaLC_CTYPE
variável de ambiente. Se você definir o código do idioma corretamente, deverá obter o mesmo resultado para todos os casos. Por exemplo:fonte
Em um palpite,
Seu código de idioma usa codificação UTF-8 e
Aproximadamente 10% do seu arquivo consiste em caracteres que requerem mais de um octeto para codificar no UTF-8.
A propósito, de
man wc
:fonte