Sebagai seorang programmer C, saya terkejut melihat bahwa wc -c
(yang menghitung jumlah byte), dan wc -m
(yang menghitung jumlah karakter) menghasilkan hasil yang sangat berbeda untuk file teks saya yang panjang. Saya selalu diberi tahu bahwa itu sizeof(char)
adalah 1 byte.
qdii@nomada ~/Documents $ wc -c sentences.csv
102990983 sentences.csv
qdii@nomada ~/Documents $ wc -m sentences.csv
89023123 sentences.csv
Ada penjelasan?
character-encoding
locale
wc
qdii
sumber
sumber
Jawaban:
The
char
ketik C adalah salah satu byte, tapi itu dimaksudkan untuk karakter ASCII; ada penyandian lebar variabel seperti UTF-8 yang dapat mengambil banyak byte per karakter.wc
menggunakanmbrtowc(3)
fungsi untuk memecahkan kode urutan multibyte, tergantung pada lokal yang ditetapkan olehLC_CTYPE
variabel lingkungan. Jika Anda mengatur lokal dengan benar, Anda harus mendapatkan hasil yang sama untuk semua kasus. Sebagai contoh:sumber
Pada tebakan,
Lokal Anda menggunakan pengkodean UTF-8, dan
Sekitar 10% dari file Anda terdiri dari karakter yang membutuhkan lebih dari satu oktet untuk dikodekan ke dalam UTF-8.
Ngomong-ngomong, dari
man wc
:sumber