25

при использовании vim over ssh я скопировал некоторый контент с веб-страницы в мой сеанс ssh/vim и получил следующий результат

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

по-видимому, <91> и <92> означают «но как я могу найти и заменить этот материал и что означает 91/92, как это кодируется?

Потому что 91/92 в ASCII означают \ и [

Спасибо за любую помощь

4 ответа4

26

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
23

Содержимое вашей исходной веб-страницы было переформатировано. В тексте, несомненно, предполагалось использовать (прямые) одинарные кавычки (ASCII 39/0x27, U+0027) вместо фигурных одинарных кавычек (U+2018 и U+2019, которые в CP1252 равны 0x91 и 0x92 (также известный как MS-ANSI). и WINDOWS-1252; обычная 8-битная кодировка в Windows)).

Vim показывает вам шестнадцатеричные коды, потому что они недопустимы в любой кодировке, используемой Vim (возможно, UTF-8). Если вы редактируете текст, который уже был сохранен в файле, вы можете перезагрузить файл как CP1252 с помощью :e ++enc=cp1252 ; это должно сделать фигурные кавычки видимыми. Но нет никакой реальной причины перезагружать его как CP1252, просто удалите символы 0x91 и 0x92 и замените их одинарными кавычками.

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
-2

На самом деле они обозначают шестнадцатеричные 91 и 92, которые в кодовой странице Windows представляют собой вьющиеся и закрывающиеся одинарные кавычки ('и' - Alt-0145 и Alt-0146).

Попробуйте следующий поиск / замена:

:s%/\<9[12]\>/'/g

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .