Como programador en C, me sorprendió ver que wc -c
(que cuenta la cantidad de bytes) y wc -m
(que cuenta la cantidad de caracteres) genera resultados muy diferentes para un archivo de texto largo mío. Siempre me dijeron que sizeof(char)
es 1 byte.
qdii@nomada ~/Documents $ wc -c sentences.csv
102990983 sentences.csv
qdii@nomada ~/Documents $ wc -m sentences.csv
89023123 sentences.csv
Alguna explicación?
character-encoding
locale
wc
qdii
fuente
fuente
Respuestas:
El
char
tipo en C es un byte, pero está destinado a caracteres ASCII; Existen codificaciones de ancho variable como UTF-8 que pueden ocupar muchos bytes por carácter.wc
usa lambrtowc(3)
función para decodificar secuencias multibyte, dependiendo de la configuración regional establecida por laLC_CTYPE
variable de entorno. Si configura la configuración regional correctamente, debería obtener el mismo resultado para todos los casos. Por ejemplo:fuente
En una suposición,
Su entorno local utiliza codificación UTF-8 y
Alrededor del 10% de su archivo consta de caracteres que requieren más de un octeto para codificar en UTF-8.
Por cierto, de
man wc
:fuente