Answers:
您的源网页上的内容被过分重新格式化。案文无疑应该使用(直)单引号(ASCII 39/0x27
,U+0027
卷曲单引号代替)(U+2018
和U+2019
,其是0x91 and 0x92
在CP1252(也称为MS-ANSI和WINDOWS-1252;在Windows的公共8位编码)) 。
Vim向您显示十六进制代码,因为它们在Vim使用的任何编码中均无效(可能是UTF-8)。如果要编辑已保存在文件中的文本,则可以使用:e ++enc=cp1252
;将文件重新加载为CP1252 。这应该使卷曲的引号可见。但是没有真正的理由将其重新加载为CP1252,只需删除0x91
和0x92
字符并将其替换为单引号即可。
:e ++enc=cp1252
:e ++enc=cp1252
?如果我想从命令行使用vi包含MS单词字符的文件,那么一步就能做到,而不是打开vi,然后使用以下:e
命令加载文件,这将是很好的选择
vim --cmd 'set fileencodings=cp1252' /path/to/file
—该命令在普通模式之前运行,.vimrc
并设置fileencodings
选项(注意结尾s
;您也可以使用更短的名称fencs
),这样Vim在加载文件时将仅尝试CP1252。这对于一次性编辑此类文件应该有效,但是如果您想使用该Vim实例来编辑其他编码的文件,则可能会导致复杂化。
vim -c"set fencs" /path/to/file
91和92是MS Windows默认版本的latin1 / ISO-8859-1编码中用于打开和关闭大括号的十六进制代码(单引号),更具体地称为cp1252 / Windows-1252(其中cp代表代码页)。
这些字符通常是人们从“ Word报价”功能的一部分复制Word文档/ Outlook电子邮件中的内容时插入的。此代码页中的其他问题字符是十六进制93/94,它们是打开和关闭的双引号,项目符号点(•)和OE连字(–和Œ)。您可以在Wikipeda页面上以绿色突出显示的“问题字符”的完整列表,这些问题字符不会以相同的代码直接映射到ISO-8859-1或UTF-8 中。
如果只需要以正确的编码打开文件,则对:e命令使用++ enc = cp1252选项:
:e ++enc=1252 filename.txt
您可以使用替代命令(: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
sed -i "s/[\x91\x92]/\'/g" *.txt
中想到了这一点,但没有成功。
perl -p -i -e "s/[\x91\x92]/'/g" *.txt
sed -i "s/\x92/'/g"
为我工作。
用于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