Ошибка Emacs при загрузке карты кодировки при сохранении файла с Unicode - PullRequest
2 голосов
/ 29 августа 2011

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

Failure in loading charset map: 8859-7

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 29 августа 2011

Я только что заметил, что 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, если можете помочь.

0 голосов
/ 14 мая 2019

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

...