Как правильно восстановить правильную систему кодирования - PullRequest
0 голосов
/ 22 марта 2019

Есть ли способ улучшить преобразование между неизвестными и известными кодировками? В настоящее время многие допустимые символы неправильно отображаются как не кодируемые.

Вот проблема, с которой я столкнулся:

Я открываю текстовый файл Latin-1 и, к моему удивлению, индикатор системы кодирования больше не 1, а =, означающий отсутствие преобразования. Все не-ascii символы отображаются как escape-символы. Поэтому я пытаюсь настроить систему кодирования прямо на m3 на индикаторе системы кодирования, сообщающем, что я хочу снова использовать Latin-1.

Теперь все символы, отличные от ascii, которые являются действительными кодами Latin-1, перечислены как неспособные к кодированию (что на самом деле неверно). Это очень запутанно.

В конце концов, я решил проблему, обнаружив нулевой байт где-то в файле.

Воспроизвести:

  1. Откройте действительный файл Latin-1 с не-ascii символами и отметьте 1: в качестве индикатора системы кодирования.

  2. Добавьте C- @ (ноль) где-нибудь в нем. Вероятно, больше в начале

  3. Сохраните файл и уничтожьте буфер.

  4. Теперь откройте этот файл и обратите внимание, что =: является индикатором системы кодирования

  5. Теперь переключитесь на Latin-1 и увидите буфер *Warning*, показывающий вам список допустимых кодов, которые система считает необратимыми, но не одного фактического преступника, поскольку список заканчивается ...

Что я мог бы ожидать, так это показывать только нулевые символы.

(происходит в Emacs 25 и 24)

1 Ответ

1 голос
/ 22 марта 2019

no-conversion на самом деле означает, что буфер содержит базовые необработанные байты , а не предполагаемые символы.И когда вы меняете систему кодирования на latin-1, вы не изменяете содержимое буфера, вы просто сообщаете Emacs, что намереваетесь использовать latin-1 для сохранения буфера в файле.Поэтому он жалуется на все байты, не относящиеся к ASCII, потому что latin-1 не знает, как кодировать эти байты (он кодирует только те символы, которые они должны представлять, то есть кодирует их в эти байты).

Вместо этого вы хотите перезагрузить ваш файл, используя latin-1 (вместо no-conversion) систему кодирования, которую вы можете сделать с C-x RET r latin-1 RET.

Возможно, Emacs должен предложить пользователю вернуть буфер, когда буфер не изменен, а вы переходите с no-conversion на что-то другое!Я предлагаю вам M-x report-emacs-bug объяснить, как вы нашли интерфейс запутанным.

...