Почему VIM показывает кодовую точку Юникода, а не кодовое значение UTF-8?

рассмотрим эту предполагаемую строку кода, которую я нашел в блоге PHP, обратите внимание на кавычки:

throw new Exception(“That's not a server name!”);

эти кавычки ДВОЙНЫЕ КАВЫЧКИ (кодовая точка Unicode: U+201D; UTF-8 шестнадцатеричное значение:0xE2 0x80 0x9D). Нажатие ga в VIM в строке состояния отображается следующее:

<”> 8221, Hex 201d, Octal 20035

почему отображается кодовая точка Юникода, а не код UTF-8 ценность?

учитывая, что файл хранится как UTF-8, и это терминал перевод байтов в глифы, я ожидал бы, что VIM покажет необработанное значение файла (кодовое значение UTF-8), а не переведет его в кодовую точку Юникода.

18
задан dotancohen
12.12.2022 21:19 Количество просмотров материала 2910
Распечатать страницу

2 ответа

почему отображается кодовая точка Unicode, а не кодовое значение UTF-8?

потому что вы используете ga:

<”> 8221, Hex 201d, Octal 20035

вместо g8:

e2 80 9d
16
отвечен romainl 2022-12-14 05:07

потому что Vim-это текстовый редактор и работает с текстом коды, не байт. Существует более одного перевода - при открытии файла редактор должен декодировать его из байтовой кодировки во внутреннее представление (обычно Unicode); при сохранении обратно в файл или при отображении его содержимого на терминале редактор должен кодировать текст обратно в байты.

одна из причин этого проста – файл и терминал могут использовать разные наборы символов. Например, вы редактируете некоторые старые документы в ISO 8859-13 или KOI8-R и хотите, чтобы они корректно отображались на терминале UTF-8.

вторая причина, опять же, заключается в том, что текстовые редакторы работа с текстом. Например, - один символ и его ширина равна одной терминальной ячейке, независимо от ее байтовой кодировки (3 байта в UTF-8, 1 байт в Windows-1257, 2 байта в Shift-JIS и так далее). Если Vim просто посчитал его как три байта, но терминал показал это как один, это приведет к вертикальным расколам, которые будут смещены, линии обернуты слишком рано, вкладки кажутся слишком узкими и так далее.

Instead of this...                ...you would see this.

┌───────────────────────────┐     ┌───────────────────────────┐
│She said, "Hello."         │     │She said, "Hello."         │
│                           │     │                           │
│She said, “Hello.”         │     │She said, “Hello.”     │
│                           │     │                           │
│Ji pasakė, „Sveiki“.       │     │Ji pasakė, „Sveiki“. │
└───────────────────────────┘     └───────────────────────────┘

не говоря уже о том, что вам придется Backspace три раза удалить один символ.

13
отвечен grawity 2022-12-14 07:24

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх