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