Vim показывает странные символы <91>,<92>
При использовании Vim поверх SSH я скопировал некоторый контент с веб-страницы в мой сеанс SSH/Vim и получил следующий результат:
SIZE=`df -h|grep $DISC|awk <91>{print $2}<92>`
По-видимому <91>
а также <92>
стоять за '
но как я могу найти и заменить этот материал? И что это 91
/92
имею в виду? Как это закодировано, потому что 91
/92
в значении ASCII \
а также [
?
4 ответа
Содержимое вашей исходной веб-страницы было переформатировано. В тексте, несомненно, должны были использоваться (прямые) одинарные кавычки (ASCII). 39/0x27
, U+0027
) вместо фигурных одинарных кавычек (U+2018
а также U+2019
, которые 0x91 and 0x92
в CP1252 (также известный как MS-ANSI и WINDOWS-1252; распространенная 8-битная кодировка в Windows)).
Vim показывает вам шестнадцатеричные коды, потому что они недопустимы в любой кодировке, используемой Vim (возможно, UTF-8). Если вы редактируете текст, который уже был сохранен в файле, вы можете перезагрузить файл как CP1252 с :e ++enc=cp1252
; это должно сделать фигурные кавычки видимыми. Но нет никакой реальной причины перезагружать его как CP1252, просто удалите 0x91
а также 0x92
символы и заменить их одинарными кавычками.
91 и 92 - это шестнадцатеричные коды для открытого и закрытого фигурного апострофа (одинарные кавычки) в стандартной версии кодировки latin1/ISO-8859-1 для MS Windows, которая более конкретно называется cp1252 / Windows-1252 (где cp обозначает код страница).
Эти символы чаще всего вставляются людьми, копирующими содержимое из документов Word / электронных писем Outlook как часть функции "Умные цитаты". Другими символами проблемы в этой кодовой странице являются шестнадцатеричный код 93/94, в котором открываются и закрываются двойные кавычки, точка маркера (•) и лигатура OE (œ и Œ). Вы можете увидеть полный список "проблемных символов", которые не отображаются непосредственно в ISO-8859-1 или UTF-8 с тем же кодом, на странице Википедии для cp1252, выделенной зеленым цветом.
Если все, что вам нужно, это открыть файл в правильной кодировке, тогда используйте параметр ++enc=cp1252 для команды:e:
:e ++enc=1252 filename.txt
Вы можете заменить определенный неправильный шестнадцатеричный код в Vim командой замены (:s) и одной из замен кода:
\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
Использование 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
На самом деле они обозначают шестнадцатеричные 91 и 92, которые в кодовой странице Windows вьются открывать и закрывать одинарные кавычки ('и' - Alt-0145 и Alt-0146).
Попробуйте следующий поиск / заменить:
:s%/\<9[12]\>/'/g