Як відобразити Unicode UTF-8 як Unicode?


12

У мене є кілька текстових файлів, кодованих UTF-8, які відображають дивні коди евакуації в Emacs. Наприклад, цей текст:

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

Показує так у Emacs:

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

Це відбувається лише в Emacs. Інші редактори правильно показують текст. Як я можу виправити цю проблему?


Оновлення 1

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


Оновлення 2

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


Emacs не розпізнає файл як UTF-8. Який вміст вашого файлу init? Яку версію 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, а не двосимвольна послідовність circflex-at; символ перед ним - це символ cirflex).

Ви можете змусити 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 Hmmm. Тоді я не розумію, чому цей файл не розпізнається як UTF-8, коли інші (особливо під emacs -Q).
Жил "ТАК - перестань бути злим"

1

Пізно відповісти на питання про БОМ, але я все одно це зроблю.

Знак порядку байтів (BOM) - це послідовність з трьох байтів \ xef \ xbb \ xbf, яка на початку файлу вказує системам та програмам, що вміст кодується як UTF-8. Вони належним чином є метаданими, не розглядаються як частина вмісту.

Більшість застосунків - Emacs є одним із них - шануйте BOM і записуйте на нього всі файли 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 Після цих виправлень потрібно РЕЛОГІНУВАТИ в сеансі, щоб зміни стали видимими.


Незважаючи на те, що ви сказали, може бути корисним, але це питання не відповідає на це запитання, оскільки проблема була лише з деякими файлами utf-8.
ЖанП'єр

Припустимо, що після чіткого визначення кодування у файлах конфігурації ця проблема може зникнути для всіх файлів назавжди :-)
Alioth
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.