Wc -m ve wc -c neden farklı?


12

Bir C programcısı olarak, wc -c(bayt wc -msayısını sayan ) ve (karakter sayısını sayan) uzun bir metin dosyam için çok farklı sonuçlar verdiğini görünce şaşırdım . Her zaman sizeof(char)1 bayt olduğu söylenmişti .

qdii@nomada ~/Documents $ wc -c sentences.csv
102990983 sentences.csv
qdii@nomada ~/Documents $ wc -m sentences.csv
89023123 sentences.csv

Herhangi bir açıklama var mı?


Aşağıdaki @ rici'nin cevabına bakın ... sorunuzda -m ve -c bayraklarınızı geri aldınız (c = bayt, m = karakterler) ... örnek çıktılarınız doğru.
Dan

Yanıtlar:


20

charC tipi bir byte, ancak ASCII karakterleri için niyetiyle; karakter başına çok bayt alabilen UTF-8 gibi değişken genişlikte kodlamalar vardır . ortam değişkeni tarafından ayarlanan yerel ayara bağlı olarak çok baytlı dizilerin kodunu çözmek wciçin mbrtowc(3)işlevi kullanır LC_CTYPE. Yerel ayarı doğru ayarlarsanız, tüm durumlar için aynı sonucu almanız gerekir. Örneğin:

qdii@nomada ~/Documents $ LC_CTYPE="C" wc -m sentences.csv
102990983 sentences.csv

16

Bir tahminde,

  1. Yerel ayarınız UTF-8 kodlaması kullanıyor ve

  2. Dosyanızın yaklaşık% 10'u UTF-8'e kodlamak için birden fazla sekizli gerektiren karakterlerden oluşur.

Bu arada, gelen man wc:

   -c, --bytes
          print the byte counts

   -m, --chars
          print the character counts
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.