私はすべての文字が1つ以上のバイトで構成されていることを知っています。
私の記憶が正しい場合、少なくとも* nixオペレーティングシステムでは、文字は通常(または排他的に)1バイトのみで構成されます。
バイトと文字の違いは何ですか(少なくとも* nixwise)?
ベストアンサー1
POSIXly、強調表示:
3.87 文字
シーケンス1 つ以上のバイト単一のグラフィック記号または制御コードを表します。
実際に正確な意味は、実際のロケールによって異なります。たとえば、「C」ロケールはprintf '\xc3\xa4\xc3\xb6' |wc -m
バイトを効果的に計算するため、4を提供し、UTF-8ロケールはTwo UTF-8エンコードされた文字なので2を提供しますäö
。端末もUTF-8に設定されていると仮定するともちろんprintf 'äö'
。
(wc -c
文字ではなくバイト数を計算するように定義されており、混乱しやすいです。)
悪いことに、文字サポートもユーティリティによって異なり、すべてがマルチバイト文字をきちんと処理するわけではありません(Unicodeのすべての欠点は言うまでもありません)。たとえば、GNU tr はマニュアルページに関係なくバイトを処理します。
$ printf ä | tr ä xy; echo
xx
$ printf ö | tr ä xy; echo
x�
最初のものはと同じでtr '\303\244' 'xy'
あるため、両方のバイトがä
置き換えられますが、2番目のものは2バイトの最初のバイトがä
同じであるために発生しますö
。もちろん、実際に文字を処理する場合は、その文字を印刷する必要x
がありますö
。