LINUX.ORG.RU

vim+utf8: некорректное отображение кода символа


0

0

Доброго времени суток.

Название темы, пожалуй, слишком громкое, но другое не приходит в голову. Как известно, в vim можно узнать шестнадцатеричное значение символа под курсором (%B в statusline или команда 'ga'). Так вот, при enc=utf8 там отображается хз что. Возможно, так надо по стандарту, возможно, это глюк, но в файле _нет_ байтов с кодами, которые отображаются

Например, буква 'ы': в utf8 код 2-х байтов, соответствующих этой букве, - 0xD1 0x8B, при этом vim отображает 0x44B. Как ни разбить (0x04 0x4b или нелогичное 0x44 0xB0) - не соответствует. Потому использовать встроенный hex-редактор затруднительно.

Как с этим бороться?

★★★★★

>Так вот, при enc=utf8 там отображается хз что. Возможно, так надо по стандарту, возможно, это глюк, но в файле _нет_ байтов с кодами, которые отображаются.

http://supernews.phpnet.us

anonymous
()
Ответ на: комментарий от anonymous

> http://supernews.phpnet.us

Предлагаю с сегодняшнего дня считать ссылки в которых встречается слово php за офтоп и нацпол.

И по ходу дела создать тригер который при попытке занести в базу слово php удаляет пользователей из базы с сохранинием ip в какуюто таблицу -> для вечного бана.

Шучю - просто смотрю все время все жалуются -- офтоп - нацпол - я также же хотчю !

paranormal ★★
()

> Например, буква 'ы': (...) vim отображает 0x44B.

и совершенно правильно делает:

044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B

это не то как буква выглядит в конкретной кодировке в файле, это её, хм, юникодный код.

alexs
()
Ответ на: комментарий от alexs

Спасибо, теперь понятнее.

Как бы это знание применить при редактировании? Т.е. можно, скажем, заменить 0x44B на 0x46B? или эта информация ... неприкладная?

router ★★★★★
() автор топика
Ответ на: комментарий от router

> Т.е. можно, скажем, заменить 0x44B на 0x46B? или эта информация ... неприкладная?
(курсор на нужном символе)
cl<C-v>u046B<ESC>

Но это совсем не то что нужно делать с бинарными файлами. Глянь RFC 2279 раздел 2. Vim работает не с байтами, а с символами, то что там называется character.

Я бы предложил такой вариант:
:set enc=latin1
:e ++enc=latin1 %
:set binary
:set display=uhex
:set isprint=32-125
Но imho делать это vim'ом... забивание гвоздей микроскопом. Вроде были какие-то нормальные hex-редакторы на ncurses.

alexs
()
Ответ на: комментарий от router

P.S. я не понял что такое "встроенный hex-редактор", но попробуй глянуть :help hex-editing. Там немного другой подход, впрочем.

alexs
()
Ответ на: комментарий от alexs

>cl<C-v>u046B<ESC>

Именно это и искал, огромное спасибо. И за RFC тоже, вроде с вариациями на тему юникода разобрался. А встроенным редактором я по неграмотности обозвал xxd, бо упомянут в хелпе :o)

router ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.