Ошибка Emacs при загрузке карты кодировки при сохранении файла с юникодом

Я создал обычный текстовый файл в 64-разрядной версии Windows 7, используя gnu emacs 23.3.1. Я могу редактировать файл с помощью других программ, таких как LinqPad (этот файл является скриптом linqpad, расширение .linq). Все нормально, пока я не поместил в файл символ Юникода, такой как греческая буква λ (лямбда). Я могу ввести букву в emacs, и она отображается правильно. Однако emacs отказывается сохранять файл, сообщая о следующей ошибке

Failure in loading charset map: 8859-7

Если я введу λ в LinqPad, emacs прочитает и отобразит их, но не сохранит файл.

Я только что заметил, что Notepad++ имеет другое неожиданное поведение с этим файлом: он отображает не λ, а вместо этого пары нечетных символов, таких как λ. Это соответствует неразумному (каламбур), что символы Юникода хранятся в виде пар. Получается, что это какая-то двусмысленная ситуация (хранение юникода в текстовых файлах), но также похоже, что linqPad и Visual Studio «делают очевидное».

Я хочу использовать emacs, потому что это единственная программа, которая у меня есть, которая перекомпоновывает последовательности закомментированных строк (строки после //, перекомпоновывает их с помощью Alt-Q), и я хочу использовать греческие символы в своих комментариях, потому что я описываю математический программа.

Буду благодарен за советы и ответы.

ОБНОВЛЕНИЕ: некоторые советы по другим вопросам говорят о том, чтобы попробовать M-x описать-char, также привязанный к C-x = ; оба они дают мне то же сообщение об ошибке, что и выше, поэтому они на правильном пути, просто не отвечают.


person Reb.Cabin    schedule 28.08.2011    source источник


Ответы (2)


Однажды это случилось со мной, когда я обновил все пакеты (включая Emacs), не осознавая, что во время обновления у меня все еще был открыт сеанс Emacs. В следующий раз, когда я попросил его сохранить немного Unicode, он попытался загрузить 8859-7 и потерпел неудачу, потому что путь в обновленной версии был другим. Мне пришлось повторить редактирование после перезапуска Emacs.

person Silas S. Brown    schedule 14.05.2019

Я только что заметил, что Notepad ++ имеет другое неожиданное поведение с этим файлом: он отображает не λs, а вместо этого пары нечетных символов, таких как λ.

λ — это то, что вы получаете, когда интерпретируете последовательность байтов 0xCE, 0xBB с использованием кодировки ISO-8859-1 или кодовой страницы Windows 1252 (западноевропейская). Кодовая страница 1252, вероятно, является кодовой страницей по умолчанию («ANSI») на вашем компьютере.

0xCE, 0xBB — это UTF-8 кодировка символа λ (U+03BB греческий строчный буква лямбда). Поэтому, чтобы отобразить его правильно, вам нужно сообщить текстовому редактору, что файл сохранен в кодировке UTF-8, а не в ANSI.

В Notepad++ выберите UTF-8 в строке меню «Кодировка».

В Emacs C-x C-m c utf-8-dos (или unix или что-то еще) в качестве префикса для открытия или сохранения файла. Надеюсь, сохранив в UTF-8, вы избежите проблем с картой ISO 8859-7 (греческая); вы, конечно, не хотите сохранять какие-либо файлы в 8859-7 или что-то еще, кроме UTF-8, если вы можете помочь.

person bobince    schedule 29.08.2011
comment
Это отличная информация, и я приближаюсь — C-x C-m в моей установке emacs немедленно выполняет save-some-buffers-без запроса и не ждет, пока я вставлю c и остальные. Я не уверен, какой будет исходная привязка ключа к C-x C-m и как это выяснить. Поиск по поводу utf-8-dos ничего не находит. Затем я попробую новую, голую установку emacs, потому что она довольно старая с сотнями настроенных файлов elisp, которые я приобрел у коллеги. - person Reb.Cabin; 30.08.2011
comment
Хм, C-X C-m c у меня работает в Linux (где по умолчанию utf-8-unix). У меня нет под рукой Windows Emacs, но я думаю, что привязка по умолчанию должна быть такой же... - person bobince; 30.08.2011
comment
хорошо, обход всех старых настроек освободил C-x C-m c и он принимает C-x C-m c utf-8-dos для команды сохранения, но все еще лает о невозможности загрузить 8859-7. Интересно, могу ли я напрямую ввести 0xCE 0xBB в файл, emacs может решить сохранить его, когда я укажу utf-8-dos. Теперь я ввожу λ с помощью программного обеспечения клавиатуры Windows (панель управления, региональный), и λ отображается буквально как этот глиф в панели окна emacs. Обычно C-q позволяет мне вводить нестандартные символы, такие как другие управляющие символы, но я не знаю, как вводить 0xCE 0xBB. Становимся ближе! - person Reb.Cabin; 30.08.2011