Как рассматривать многобайтовые символы просто как последовательность байтов?

Я хотел бы использовать vim с двоичными файлами. Я бегу, запускаю vim с-b и я имею isprint = а также display += uhex. Я использую следующиеstatusline:

%<%f\ %h%m%r%=%o\ (0x%06O)\ \ %3.b\ <%02B>\ %7P

поэтому я получаю вывод, содержащий некоторую полезную информацию, такую ​​как смещение байта в файле и текущий символ в шестнадцатеричном формате и т. д. Но у меня возникают проблемы со случайным набором данных, интерпретируемых как многобайтовые символы, которые не позволяют мне получить доступ к внутренним байтам, объединенным с окружением (включая украшение vim) или отображать как.

Конечно, я пробовал открывать файлы с помощью ++enc=latin1. Однако в моей системе используется кодировка UTF-8, поэтому vim якобы выполняет внутреннее преобразование файла из Latin-1 в UTF-8 и его отображение. У этого есть две проблемы:

  • Последовательность <c3><ac> отображается как ì, скорее, чем ì, но символы считаются как два байта каждый, поэтому мой %oи неправильно считает смещения. Это 2 байта в файле, но, очевидно, 4 байта в буфере vim.
  • Я не знаю почему мой isprintигнорируется. Ни один из этих символов не находится между 32 и 126, поэтому они должны отображаться в шестнадцатеричном формате.

Я нашел следующий обходной путь: я установил encoding к latin1, но termencoding к utf-8. Это достигает того, что я хочу, но нарушает другие вещи, например, когда vim нужно отображать сообщения о состоянии ("новый файл", "изменен" и т. Д.) На моем языке, потому что он также хочет использовать для них кодировку, а они не подходят. Думаю, я мог бы запустить vim вLC_ALL=Cно мне кажется, что я уже прибегаю к слишком многим пакостям. Есть ли способ лучше, т. Е. Без возни сencoding?

0 ответов

Другие вопросы по тегам