Как отобразить Unicode UTF-8 как Unicode?

12

У меня есть несколько текстовых файлов в кодировке UTF-8, которые отображают странные escape-коды в Emacs. Например, этот текст:

In is quaestione primo exponam quid intelligendum est per hoc nomen 'Deus'; secundo, responsedebo ad quaestionem.

Как показано в Emacs:

введите описание изображения здесь

Это происходит только в Emacs. Другие редакторы показывают текст правильно. Как я могу решить эту проблему?


Обновление 1

Если я позвоню revert-buffer-with-coding-systemи выберу utf-8файл, прочитайте правильно. Итак, как правильно догадался Жиль, Emacs не определяет кодировку файла. Если я добавлю код ; -*- coding: utf-8 -*-в файл, откроется Emacs и отобразит его правильно.


Обновление 2

Я перекодировал файл в «UTF-8 с кодировкой BOM», и теперь он хорошо отображается в Emacs. Я не знаю, в чем разница между этими двумя типами, но Emacs, кажется, знает только о BOMed.

NVaughan
источник
Emacs не распознает файл как UTF-8. Каково содержание вашего файла инициализации? Какую версию Emacs вы используете? Изменится ли что-нибудь, если вы запустите Emacs с emacs -qили emacs -Q?
Жиль "ТАК - перестань быть злым"
У меня нет проблем с другими файлами UTF-8. Я использую GNU Emacs 24.4.4. Нет разницы с emacs -qили emacs -Q.
NVaughan
Ах, если он работает с другими файлами и в первоначальной конфигурации, возможно, причина в том, что файл также содержит недействительный UTF-8. Дай мне посмотреть, как сказать с помощью Emacs ...
Жиль: "Хватит быть злым"
возможно связанный: emacs.stackexchange.com/q/4100/2264
Шон Оллред

Ответы:

10

По какой-то причине Emacs не распознает файл как UTF-8. Вы можете заставить Emacs снова открыть файл как UTF-8, запустив команду C-x RET r( revert-buffer-with-coding-system) и введя utf-8.

Причина, по которой Emacs не распознал этот файл как UTF-8 (но распознает другой), заключается в том, что он содержит некоторую недопустимую последовательность UTF-8. Эта последовательность будет по-прежнему отображаться в виде обратной косой черты, за которой следуют три восьмеричные цифры другого цвета ( escape-glyphлицо) после повторной интерпретации файла как UTF-8. Вы можете искать такую ​​последовательность, запустив C-M-s( isearch-regexp) и ища

[^^@-~[:multibyte:]]

где ^@вводится вводом C-q C-SPC(это символ ^ @ = 0, а не двухсимвольная последовательность circleflex-at; символ перед ним является символом циркумфлекса).

Вы можете заставить Emacs распознавать файл как UTF-8, добавив переменную файла системы кодирования : поместите что-то вроде -*-coding: utf-8-*-первой строки или поместите что-то вроде этого в конец файла (вы можете заменить #любой префикс, но Local Variables:и End:должны появиться точно так же, как в конце

# Local Variables:
# coding: utf-8
# End:

Emacs выбирает кодировку, в соответствии с которой файлы интерпретируются на основе нескольких настроек, в первую очередь языковых сред и переменных auto-coding-alistи auto-coding-regexp-alist. Поскольку у вас есть такая же проблема с этим файлом даже при запуске emacs -Q, я думаю, что это не проблема с этими настройками, а с содержимым файла.

Жиль "ТАК - прекрати быть злым"
источник
Если я открываю файл без кодирования переменного файловой системы (т.е. когда файл отображается неправильно) и запустить регулярное выражение поиска, все мои \342, \200, \230и т.д. выбрано. Но если я открою его «правильно» (используя переменную кодирования), то результаты поиска не появятся.
NVaughan
@NVaughan Хммм. Тогда я не понимаю, почему этот файл не распознается как UTF-8, когда другие (особенно под emacs -Q).
Жиль "ТАК - перестань быть злым"
1

Уже поздно отвечать на вопрос о спецификации, но я все равно это сделаю.

Метка порядка байтов (BOM) представляет собой последовательность из трех байтов \ xef \ xbb \ xbf, которая в начале файла указывает системам и приложениям, что содержимое кодируется как UTF-8. По сути, это метаданные, которые не рассматриваются как часть содержимого.

Большинство приложений, одним из которых является Emacs, соблюдают спецификацию и записывают в нее все файлы UTF-8. Другие приложения могут почитать его в чтении, но не писать; и другие не знают об этом и могут выдать сообщение об ошибке, когда они сталкиваются с этим. Другими словами, ситуация грязная. Я предпочитаю использовать его везде, где это возможно.

Умышленно ответил
источник
-1

Только для UNIX-подобных систем.

Во многих случаях простое определение кодировки в ~ / .bashrc ~ / bash_profile

LANG=en_EN.UTF8

выполнено с

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8

в ~ / .profile должен решить вашу проблему.

PS После этих исправлений вам необходимо RELOGIN в своем сеансе, чтобы изменения стали видимыми.

Алиот
источник
Несмотря на то, что вы говорите, может быть полезно, это, кажется, не отвечает на этот вопрос, так как проблема была только с некоторыми файлами utf-8.
JeanPierre
Предположим, что после строгого определения кодировки в файлах конфигурации эта проблема может исчезнуть навсегда для всех файлов :-)
Alioth