Подтвердить что ты не робот

Как получить vim, чтобы показать байтовое представление данных файла

Я не хочу, чтобы vim никогда не интерпретировал мои данные каким-либо конкретным способом кодирования. Другими словами, когда я нахожусь в vim, я хочу, чтобы символ, на котором мой курсор включен, соответствовал фактическому байту, а не utf * (и т.д.) Представление этого байта.

Мне нужно использовать vim для анализа проблем, вызванных ошибками преобразования Unicode, сделанными другими людьми (с использованием другого программного обеспечения), поэтому важно, чтобы я увидел, что на самом деле там.

Например, в Cygwin vim я смог видеть спецификации UTF-8 как

ï "¿[НАЧАЛО ДАННЫХ ФАЙЛА]

Это прекрасно. Я признаю это как спецификацию UTF-8, и если я хочу знать, что такое hex для каждого символа, я могу поместить курсор на символы и использовать "ga".

Недавно я получил подходящую машину Linux (Fedora). В /etc/vimrc эта строка существует

set fileencodings = ucs-bom, utf-8, latin1

Когда я смотрю на спецификацию UTF-8 на этом компьютере, спецификация полностью скрыта.

Когда я добавляю следующую строку в ~/.vimrc

set fileencodings = latin1

Я вижу

Ä "¿

Первые 3 символа - спецификация (когда ga используется против них). Я не знаю, что такое последние 3 персонажа.

В какой-то момент я даже видел спецификацию UTF-8, представленную как "feff" - спецификацию UTF-16.

В любом случае, вы видите мою проблему. Мне нужно точно посмотреть, что находится в моем файле, без того, чтобы vim интерпретировал байты для меня. Я знаю, что могу использовать xxd, od и т.д., Но vim всегда был очень удобным инструментом анализа. Кроме того, я хочу иметь возможность редактировать файлы и сохранять их без каких-либо проблем с преобразованием.

Спасибо за вашу помощь.

4b9b3361

Ответ 1

Используйте режим 'binary':

:edit ++bin file

или

vim -b file

От :help 'binary':

Параметры 'fileencoding' и 'fileencodings' не будут использоваться, файл читается без преобразования.

Ответ 2

Последовательность  на самом деле является U + FEFF (BOM) кодированной UTF-8, декодированной латинской 1, кодированной UTF-8 и снова декодированной латинской.  - U + FEFF (BOM), кодированный как UTF-8 и декодированный как latin1. Вы не можете уйти от кодировок. Это не фактические байты, они являются латинскими символами, отображаемыми из-за неправильного декодирования. Если вы хотите использовать байты, используйте шестнадцатеричный редактор; в противном случае используйте правильное декодирование.

Ответ 3

Я получаю хороший пробег от выполнения :e ++enc=latin1 после загрузки файла (предварительное предположение VIm о кодировании на данном этапе не важно).