1

У меня есть текстовый файл (на самом деле .csv, экспортированный из .xlsx в LibreOffice) со строками, которые имеют тарабарщину при открытии в LibreOffice Calc. В VIM они выглядят следующим образом:

Joe User, joe@user.com, p@ss<96>w0rd

<96> был каким-то забавным персонажем, похожим на - , но MS Office решил изменить его на что-то другое. Файл поэтому не ASCII:

$ file -i Users.csv
Users.csv: text/plain; charset=unknown-8bit

Обратите внимание, что все эти «забавные» символы имеют кодовые точки меньше 127, поэтому я действительно не знаю, как Calc и VIM понимают, что это не ASCII. Какие другие кодировки имеют все кодовые точки ниже 127, то есть не являются ASCII-совместимыми?Кроме того, как я могу искать эти символы в VIM? Для не ASCII символов выше 127 я использую /[^\x00-\x127] для поиска, но, конечно, он не найдет <96> .

Исходный файл .xlsx по-прежнему находится на компьютере Windows другого пользователя, и, конечно же, я могу убедиться в его MS Office, что символ <96> не ASCII 96 `, а скорее забавная вариация '.

1 ответ1

2

<96> - это не ASCII 96: это представление UTF-8 U+0096 (часть расширенной латиницы 1), "начало защищенной области", что бы это ни значило.

Вы можете нажать ga чтобы увидеть информацию о персонаже под курсором. Для <96> вы получите следующее:

<<96>> 150, Hex 0096, Octal 226

Вы можете удалить этот символ из буфера с помощью:

:%s/<C-v>u0096//g

который должен выглядеть так:

:%s/<96>//g

Или вы можете сделать:

:%s/\%u0096//g    " hex form

или же:

:%s/\%d150//g     " decimal form

или же:

:%/\%o226//g      " octal form

Смотрите :help ga :help utf-8-typing :help \%u .

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