テスト目的(SSHクライアントでUTF-8出力をテストする)のために(vimで)作成したファイルがあります。ただし、このファイルには奇妙なことが起こっています。
ファイルに何バイトあるのか疑問に思ったので、hexdump
を使用しました :
[email protected]:~$ hexdump -x intl.txt
0000000 9ecf 000a
0000003
わかりました。そこには4バイトあります。00と0aがどのようにそこに入ったのか、はっきりしていませんが、何でもです。ただし、ここで奇妙になります:
[email protected]:~$ ls -al intl.txt
-rw-rw-r-- 1 username username 3 Mar 26 15:14 intl.txt
待って、それは3バイトですか?ここで何が起こっているのですか?
それが十分に奇妙ではなかったかのように、hexdump -C
非常に異なる出力を提供します:
[email protected]:~$ hexdump -C intl.txt
00000000 cf 9e 0a |...|
00000003
Vimもファイルについて少し混乱しています。起動すると、ステータス行に次のように表示されます:
"intl.txt" 1L, 3C
しかし、私はこれを取得します(set list
を使用) ):
Ϟ$
~
~
~
~
つまり、3文字あると思いますが、印刷するのは1文字だけです。コッパとその下の空白行が印刷されているかどうかわかりました…
承認された回答:
他の人が指摘しているように、これはhexdump -x
が原因です ファイルを2バイトの単語を含むものとして扱います。リトルエンディアンシステム(ほとんどすべてのデスクトップがそうである)では、これは、バイトが表示される前にスワップされることを意味します。これは、バイト値がペアで出力され、これらのバイトの順序が入れ替わることを意味します。バイト数が奇数なので、hexdump
最後のペアを構成するためにゼロを追加するだけです。次に、ゼロは0a
と交換されます 。これは、hexdump
の動作を文書化したものです。 、だからそれはあなたに嘘をついていません!
hexdump -C
を使用する ファイル内の順序でバイトを表示するフォーマットされた出力を取得するためのより良いコマンドです。また、0a
は新しい行であり、おそらくファイルを作成したものによって静かに追加されました(vim
これはデフォルトで行われます)。例:echo
そうしないように指示しない場合は、常に新しい行が追加されます。 bash
で :
echo -e '\xcf\x9e' | hexdump -C
同じ結果が得られますが、-n
で改行を抑制します あなたが期待したものを与えるでしょう:
echo -ne '\xcf\x9e' | hexdump -C
vim
を停止するには 改行の追加から:
:set noeol
:set binary