Als C-Programmierer war ich überrascht zu sehen, dass wc -c
(die die Anzahl der Bytes zählen) und wc -m
(die die Anzahl der Zeichen zählt) sehr unterschiedliche Ergebnisse für eine lange Textdatei von mir ausgegeben werden. Mir wurde immer gesagt, dass dies sizeof(char)
1 Byte ist.
qdii@nomada ~/Documents $ wc -c sentences.csv
102990983 sentences.csv
qdii@nomada ~/Documents $ wc -m sentences.csv
89023123 sentences.csv
Irgendeine Erklärung?
character-encoding
locale
wc
qdii
quelle
quelle
Antworten:
Der
char
Typ in C ist ein Byte, aber für ASCII-Zeichen vorgesehen. Es gibt Codierungen mit variabler Breite wie UTF-8, die viele Bytes pro Zeichen belegen können.wc
Verwendet diembrtowc(3)
Funktion zum Dekodieren von Multibyte-Sequenzen, abhängig vom Gebietsschema, das von derLC_CTYPE
Umgebungsvariablen festgelegt wird. Wenn Sie das Gebietsschema richtig eingestellt haben, sollten Sie in allen Fällen das gleiche Ergebnis erhalten. Beispielsweise:quelle
Auf eine Vermutung,
Ihr Gebietsschema verwendet die UTF-8-Codierung und
Ungefähr 10% Ihrer Datei besteht aus Zeichen, für deren Codierung in UTF-8 mehr als ein Oktett erforderlich ist.
Übrigens von
man wc
:quelle