5

うまくいけば、これは答えるのが簡単でしょう。

Win7にはgvimとvimがあります。コマンド結果をファイルにリダイレクトし、Vim(またはGvim、同じ効果)で開くと、すべての文字の間にバイナリ0(^ @記号)が挿入されます。

だから、代わりに

r96130

私は持っています

^@r^@9^@6^@1^@3^@0^@

それを(推奨)防止する方法、または(うまく)それを取り除く方法はありますか?

置換を試みましたが、明らかにこれは^ @だけではなく、バイナリゼロ(私は思う)なので、では取り上げられません/^@

編集:

1)エンコーディングをUTF-8(私が取り組んでいるコンテンツのエンコーディング)とUTF-16(@Philippe Wendlerの回答による、ありがとう)に設定しようとしましたが、役に立ちませんでした。

2)__PowerShell__は有罪の当事者です。通常のコマンドラインで(を介してcmd)リダイレクトを実行すると、副作用はありません。PowerShellセッションで作成されたファイルにのみ、これらのバイナリゼロが挿入されます。

3)@Christianが言及したPowershellグッズは役に立ちませんでした。メインOSとしてUbuntuに切り替え、そこでVimを使用しているので、質問には答えないままにしておきます。したがって、ここでの唯一の「解決策」は、PowerShell + Vimを使用しないことです。これは、明らかに答えとして欠けています。:-)

解決!

解決策をくれた@EmperorXLIIに感謝します!コメントにあるようにここに投稿すると、十分に表示されない可能性があります。

dir | OutFile -Encoding UTF8 test 

バイナリゼロなしでVimに表示されるファイルを作成します。OEM、ASCII、およびテストした他の2つのエンコーディングを使用して実行した場合も同じことが起こります。

有望なヒントは:he 'fileencodings'-はい、複数形、@ Dan Fitchによるものですが、その時点ですでにWin7から離れているため、テストしていません。

4

4 に答える 4

4

Windows は内部で Unicode エンコーディングとしてUTF-16を使用しており、このファイルも UTF-16 を使用しているように見えますが、vim は 8 ビットの文字セット (おそらく latin1) で解釈します。

:set encoding=utf-16適切なエンコーディングを選択するには、vim で試してください。

于 2012-06-29T10:20:31.517 に答える
3

私も同じ問題を抱えていました。cmdシェル(またはConsole2)を使用して、次のようなコマンドを実行します。

prompt> myBatFile.bat > myOutputFile.log

たくさんの^@シンボルを取得しますが、次のコマンドを実行しただけのマクロを使用してそれらを取り除くことができます。

:s/\r\(\n\)/\1/g

これは私には受け入れられましたが、面倒でした(unixとDosスタイルのキャリッジリターンが異なり、ファイルの最後に行末がないことの組み合わせだったと思います)。さらに悪いことに、Windows 7に移行してから、PowerShellを使い始めました。これが発生すると、^@記号が表示されるだけでなく、ファイルの先頭に^Maが ÿþ表示されます(これはバイトだったと思います)。 gVIMが正しく解釈できなかったことを示す順序マーク)。

とにかく、PowerShellのリダイレクト方法に従い、gVIMでファイルを読み取る際に問題が発生しないように、batファイルの呼び出し方法を変更しました。

prompt> myBatFile.bat | Out-File myOutputFile.log -encoding UTF8

お役に立てば幸いです。

于 2012-10-23T14:20:35.357 に答える
1

PowerShellでは、を使用してファイルにリダイレクトしてみてください

set-content c:\file.txt -encoding Unicode # or BigEndianUnicode

out-file同じように使用することもできます

于 2012-06-29T11:30:43.670 に答える