wc -mとwc -cはなぜ違うのですか?

wc -mとwc -cはなぜ違うのですか?

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

説明がありますか?

ベストアンサー1

Cのタイプcharはバイトですが、ASCII文字に対して機能します。可変幅エンコーディングUTF-8などのエンコーディングは、文字ごとに多くのバイトを占めます。環境変数によって設定されたロケールに従ってマルチバイトシーケンスをデコードするには、wcこの関数を使用します。ロケールが正しく設定されると、すべての場合で同じ結果が得られます。たとえば、mbrtowc(3)LC_CTYPE

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

おすすめ記事