8進数302 240は一緒に切り捨て防止スペースに対応するようです。

8進数302 240は一緒に切り捨て防止スペースに対応するようです。

テキストファイルの特定の行(例:1123行、以下を参照)を見ると、切り捨てられないスペースがあるようですが、わかりません。

$ cat myfile.csv | sed -n 1123p | cut -f2
Lisztes feher

$ cat myfile.csv | sed -n 1123p | cut -f2 | od -An -c -b
   L   i   s   z   t   e   s 302 240   f   e   h   e   r  \n
 114 151 163 172 164 145 163 302 240 146 145 150 145 162 012

しかし、ASCIIコード切り捨て防止スペースの8進数表現は240です。それでは、302は何に該当しますか?このファイルに特別なものがありますか?

理解を助けるためにこのような質問をします。私はすでにsed次の方法で問題を解決する方法を知っています。回答:

$ cat myfile.csv | sed -n 1123p | cut -f2 | sed 's/\xC2\xA0/ /g' | od -An -c -b
   L   i   s   z   t   e   s       f   e   h   e   r  \n
 114 151 163 172 164 145 163 040 146 145 150 145 162 012

詳細については、元のファイルが .xlsx(優れている)フォーマット。マイコンピュータを実行するとシベントゥ開いてみる無料オフィス計算(v5.1)。次に、「文字セット= Unicode(UTF-8)」を使用して「テキストCSV」として保存し、タブをフィールド区切り文字として使用します。

$ file myfile.csv
myfile.csv: UTF-8 Unicode text

ベストアンサー1

U + 00A0 Unicode文字のUTF-8エンコーディング。

$ unicode U+00A0
U+00A0 NO-BREAK SPACE
UTF-8: c2 a0 UTF-16BE: 00a0 Decimal:   Octal: \0240
 
Category: Zs (Separator, Space)
Bidi: CS (Common Number Separator)
Decomposition: <noBreak> 0020

$ locale charmap
UTF-8
$ printf '\ua0' | od -to1
0000000 302 240
0000002

UTF-8は、1文字あたりのバイト数が可変のUnicodeエンコーディングです。文字セットとしてのUnicodeはiso8859-1(latin1とも呼ばれます)の親セットであり、それ自体はASCIIの親セットです。

iso8859-1では改行しない空白文字(iso8859-1のコードポイント0xa0、Unicodeのコードポイントと同様)は0xa0バイトで表示され、UTF-8ではコードポイント0〜127のみが表示されます。 1バイト(これにより、UTF-8はASCIIの親セットになります。つまり、ASCIIファイルもUTF-8ファイルです。)

128以上のコードポイントは、エンコードするために1文字あたりより多くのバイトを使用します。バラよりウィキペディアUTF-8 エンコードアルゴリズムの詳細情報です。

おすすめ記事