回答:
あなたが試すことができます:
%s/<CTRL-2>//g
(通常のPC上)
%s/<CTRL-SHIFT-2>//g
(Mac PCの場合)
ここで、<CTRL-2>
最初CTRLに通常のPCを押し下げ、押したまま、押したまま2、放したままにしCTRLます。
そして<CTRL-SHIFT-2>
ダウン手段初回controlプレスダウン、ダウン押すとMacのPC上では、それを維持shift押し、ヒットとしてそれを維持、MacのPC上2、リリースcontrolとshift。
最後に、二つのコマンドの両方が生じるはずである%s/^@//g
画面上に。^@
手段(そうでない場合は表示されませんでしたNULLバイト、)単一の文字、ではない^
が続く@
ので、あなただけの入力はできません^
し、@
上記のコマンドの行インチ
このコマンドは、すべての^@
。
ファイルが破損しているとは思わない。例の行は、各文字の間にヌルバイトがある通常のテキストを含むように見えます。これは、UTF-16でエンコードされたテキストファイルであることを示唆していますが、ファイルの先頭にバイトオーダーマークがありません。http://en.wikipedia.org/wiki/Byte-order_markを参照してください
メモ帳を開いて「ファイル名」という単語を入力し、Unicodeビッグエンディアンとして保存するとします。このファイルの16進ダンプは次のようになります。
fe ff 00 66 00 69 00 6c 00 65 00 6e 00 61 00 6d 00 65
このファイルをVimで開くと、うまく見えます-'fe ff'バイトは、Vimにファイルのエンコード方法を伝えます。ここで、まったく同じバイトシーケンスを含むファイルを作成しますが、先頭に「fe ff」はありません。Vimは、nullバイトの代わりに^ @(または構成に応じて<00>)を挿入します。メモ帳はスペースを挿入します。
そのため、nullを削除するのではなく、Vimにファイルを正しく解釈させることを本当に検討する必要があります。次のコマンドを使用して、Vimに正しいエンコーディングでファイルをリロードさせることができます。
:e ++enc=utf16
これは実際にvim内で私のために働いた:
:%s/\%x00//g
<Ctrl-V><Ctrl-2>
(と同様に)動作させることができませんでした<Ctrl-Shift-2>
が、これは動作しました。
FWIW、私の場合、cygwinでvimを使用して、Macで作成されたテキストファイルを編集する必要がありました。受け入れられた解決策は私にはうまくいきませんでしたが、近かったです。Unicodeの操作に関するVim wikiページによると、BOMバイトのビッグエンディアンバージョンとリトルエンディアンバージョンには違いがあります。そのvim
ため、BOMエンコーディングのリトルエンディアンバージョンを使用するよう明示的に指示する必要がありました。
適切なエンコーディングを選択した後にのみ、ファイル形式(行末)を変換してdos
、Windowsエディターでファイルを編集できるようにしました。エンコードを指定する前にファイル形式をリセットして設定しようとすると、悲しみが生じました。使用したコマンドの完全なリストは次のとおりです。
:e ++enc=utf16le
:w!
:e ++ff=mac
:setlocal ff=dos
:wq
^@
適切なエンコーディングを使用していれば悪い文字ではありませんが、削除したい場合は試してください:
tr -d '\000'
sed 's/\000//g'
^ M文字はサンプルデータにあります
処理する前にファイルをUnix / Linux形式に変換するには、次を試してください。
dos2unix filename
-rhelおよびその他
dos2ux filename [newfilename]
-HP-UX
Vimでは、@ jrbの回答に加えて、fileencodingsオプションに基づいてファイルの文字エンコードが検出されます。(fileencodingsの末尾の「s」に注意してください)
つまり、Windowsでは、fileencodings
オプションのデフォルト値はですucs-bom
。つまり、
ファイルの先頭にBOMが存在するかどうかを確認してください。
BOMが存在する場合は、「BOMからファイルの文字エンコーディングを読み取ります」。
BOMが存在しない場合(この場合、fileencodings
オプションで指定されたすべての文字エンコードが一致しなかったことも意味します)、encoding
オプションで指定された文字エンコードでファイルを読み取ります。encoding
オプションのデフォルトの文字エンコーディングは次のとおりlatin1
です。これlatin1
は、1バイト長の文字エンコーディングであるため、ファイル内のすべてのバイトは有効なlatin1
文字です(表示されているNul
文字^@
*であっても)。
*-実際に^@
は、Vimのバッファーテキスト内の改行文字であり、Nul文字ではありません。
ファイルを読み取る適切な方法は、文字エンコードを手動でUTF-16として指定することです(この場合、UTF-16が適切な文字エンコードであるように見えるため)。