为什么wc -m和wc -c不同?


12

作为一名C程序员,我很惊讶地发现wc -c(它计算字节数)和wc -m(它计算字符数)对于我的一个长文本文件输出的结果截然不同。我一直被告知那sizeof(char)是1个字节。

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

有什么解释吗?


请参阅下面的@rici答案...您在问题中向后带有-m和-c标志(c =字节,m =字符)...但是,示例输出正确。
2012年

Answers:


20

charC中的类型是一个字节,但是它用于ASCII字符;有可变宽度编码等UTF-8,可以占用每个字符的字节数。wc使用此mbrtowc(3)函数解码多字节序列,具体取决于LC_CTYPE环境变量设置的语言环境。如果正确设置语言环境,则在所有情况下都应获得相同的结果。例如:

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

16

a测

  1. 您的语言环境使用UTF-8编码,并且

  2. 您文件的大约10%由字符组成,这些字符需要多个字节才能编码为UTF-8。

顺便说一下,来自man wc

   -c, --bytes
          print the byte counts

   -m, --chars
          print the character counts
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.