テキストファイルの特定の行(例: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 エンコードアルゴリズムの詳細情報です。