web-dev-qa-db-ja.com

Vimが奇妙な文字を表示<91>、<92>

SSHを介してVimを使用しているときに、Webページから私のコンテンツをSSH/Vimセッションにコピーし、次の結果を得ました。

_SIZE=`df -h|grep $DISC|awk <91>{print $2}<92>`
_

どうやら_<91>_と_<92>_は_'_を表していますが、これを検索して置き換えるにはどうすればよいですか?そして、その_91_/_92_はどういう意味ですか? ASCII平均_91_および_92_を意味する__\_/_[_のため、これはどのようにエンコードされますか?

27
Jeremy S.

ソースWebページのコンテンツが熱心に再フォーマットされました。テキストは間違いなく、カーリーシングルクォート(39/0x27およびU+0027、CP1252ではU+2018(MS-ANSIおよびWINDOWS-1252とも呼ばれる、一般的な8ビット)の代わりに、(ストレート)シングルクォート(ASCII U+20190x91 and 0x92)を使用することになっています。 Windowsでのエンコード))。

16進コードは、Vimが使用しているエンコード(おそらくUTF-8)では無効であるため、Vimに表示されます。ファイルに既に保存されているテキストを編集している場合は、:e ++enc=cp1252を使用してファイルをCP1252として再ロードできます。これにより、カーリークオートが表示されます。ただし、CP1252として再ロードする実際の理由はありません。0x91および0x92文字を削除し、それらを一重引用符で置き換えます。

25
Chris Johnsen

91と92は、MS Windowsのデフォルトバージョンのlatin1/ISO-8859-1エンコーディングのオープンとクローズのカーリーアポストロフィ(一重引用符)の16進コードで、具体的には cp1252/Windows-1252 と呼ばれます。 =(cpはコードページを表します)。

これらの文字は、ほとんどの場合、「スマートクォート」機能の一部としてWord文書やOutlookメールからコンテンツをコピーする人によって挿入されます。このコードページの他の問題のある文字は、開閉二重引用符である16進数93/94、箇条書き(•)、およびOE合字(œおよびŒ)です。 cp1252のWikipedaページ 強調表示されている「問題のある文字」の完全なリスト(同じコードでISO-8859-1またはUTF-8に直接マッピングされないもの)を見ることができます。緑で。

正しいエンコーディングでファイルを開くだけの場合は、++ enc = cp1252オプションを:eコマンドに使用します。

:e ++enc=1252 filename.txt

Vimの特定の不正な16進コードを置換コマンド(:s)とコード置換の1つで置き換えることができます。

\d123   decimal number of character
\o40    octal number of character up to 0377
\x20    hexadecimal number of character up to 0xff
\u20AC  hex. number of multibyte character up to 0xffff
\U1234  hex. number of multibyte character up to 0xffffffff

16進数の91/92文字を変更するには、次の操作を行う必要があります。

:%s/[\x91\x92]/'/g
28
lambacck

開く前に、iconvを使用してテキストファイルをCP1252からUTF-8に変換します。

iconv -f cp1252 -t utf8 inputfile.csv > outputfile.csv

Mac OSではこれを使用します。

iconv -f cp1252 -t UTF8-MAC inputfile.csv  > outputfile.csv