通过 SSH 使用 Vim 时,我将网页上的一些内容复制到我的 SSH/Vim 会话中,得到了以下结果:
SIZE=`df -h|grep $DISC|awk <91>{print $2}<92>`
显然<91>
和<92>
代表'
,但我如何搜索和替换这些内容?91
/是什么92
意思?这是如何编码的,因为ASCII 中的91
/代表和?92
\
[
答案1
您的源网页上的内容被过度重新格式化。文本毫无疑问应该使用(直)单引号(ASCII 39/0x27
, U+0027
)而不是弯单引号(U+2018
和U+2019
,它们属于0x91 and 0x92
CP1252(也称为 MS-ANSI 和 WINDOWS-1252;Windows 上常见的 8 位编码))。
Vim 显示十六进制代码,因为它们在 Vim 使用的任何编码(可能是 UTF-8)中都无效。如果您正在编辑已保存在文件中的文本,则可以使用 重新加载文件为 CP1252 :e ++enc=cp1252
;这应该会使花括号可见。但没有必要将其重新加载为 CP1252,只需删除0x91
和0x92
字符并将其替换为单引号即可。
答案2
91 和 92 是 MS Windows 默认版本的 latin1/ISO-8859-1 编码中左撇号和右撇号(单引号)的十六进制代码,更具体地称为cp1252/Windows-1252(其中 cp 代表代码页)。
这些字符通常是由复制 Word 文档/Outlook 电子邮件内容的人作为“智能引号”功能的一部分插入的。此代码页中的其他问题字符是十六进制 93/94,即开和关双引号、项目符号 (•) 和 OE 连字符 (œ 和 Œ)。您可以在cp1252 的维基百科页面以绿色突出显示。
如果您只想以正确的编码打开文件,那么请使用 :e 命令的 ++enc=cp1252 选项:
:e ++enc=cp1252 filename.txt
如果已加载文件,则可以重新加载而不指定文件名:
:e ++enc=cp1252
您可以使用替换命令 (:s) 和以下代码替换之一来替换 Vim 中的特定错误十六进制代码:
\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
要更改十六进制 91/92 字符,您需要执行以下操作:
:%s/[\x91\x92]/'/g
答案3
用于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
答案4
它们实际上代表十六进制 91 和 92,在 Windows 代码页中是花括号内的开始和结束单引号(' 和 ' - Alt-0145 和 Alt-0146)。
尝试以下搜索/替换:
:s%/\<9[12]\>/'/g