2013-07-25 2 views
6

В Emacs, после вводачем разница между различными типами 'UTF-8' в Emacs

M-x revert-buffer-with-coding-system 

Я видел много типов 'UTF-8', например, UTF-8, UTF-8 авто-UNIX, UTF-8 Emacs-Unix и т.д.

Я хочу знать, в чем разница между ними.

У меня есть googled, но я не смог найти правильный ответ.

P.S.

Я задаю этот вопрос, потому что несколько месяцев назад я столкнулся с проблемой кодирования. Я написал программу PHP в Emacs и в моем ~/.emacs, я установил

(prefer-coding-system 'utf-8) 

но при просмотре страницы PHP в браузере, я обнаружил, что браузер не может отображать содержимое правильно из-за проблема кодирования, хотя я написал

<meta name="Content-Type" content="text/html; charset=UTF-8" /> 

на странице.

Но после того, как я использовал notepad ++, чтобы сохранить файл в utf-8, браузер может отображать содержимое правильно.

Так что я хочу узнать больше о кодировке в Emacs.

+1

Вы всегда можете попробовать «hexl-mode», чтобы посмотреть, как именно файл хранится. Скорее всего, это связано с спецификацией и, возможно, с порядком байтов в спецификации (есть вариант UTF-8, где байты не находятся в сетевом порядке iirc, никто не использует его на самом деле, но он может быть там для полноты) , –

ответ

9

Последняя часть имени кодирования (напр.mac в utf-8-mac), как правило, чтобы описать специальный символ, который будет использоваться в конце строк:

  • -mac: CR, стандартный линейный разделитель с MacOS (до OS X)
  • -unix: LF стандартный разделитель для UNICE систем (так BSD на базе Mac OS X)
  • -dos: CR+LF разделитель для DOS/Windows

некоторые дополнительные кодировки параметры включают в себя:

  • -emacs: поддержка для кодирования всех символов Emacs (в том числе, не Unicode)
  • -with-signature: Силы использования спецификации (см ниже)
  • -auto: автоопределение BOM

Вы можете комбинировать различные возможности, которые делают список, показанный в Emacs.

Чтобы получить информацию о типе конца строки, спецификации и кодировок, предоставленные кодировок, вы можете использовать describe-coding-system, или: ChC

Что касается спецификации:

  • utf standard определяет специальную подпись, которая должна быть помещена в начале (текстовых) файлов в отдельную для utf-16, кодирующую порядок байтов (поскольку utf-16 хранит символы с 2 байтами - или 16 бит) или endianess: некоторые syste ms помещают самый старший байт первым (big-endian ->utf-16be), некоторые другие помещают младший значащий байт первым (little-endian ->utf-16le). Эта подпись называется BOM: Byte Order Mark

  • в utf-8, каждый символ представлен один байт (исключая для расширенных символов больше 127, они используют специальную последовательность байтов), таким образом, указываемый byte order - это глупость, но эта подпись в любом случае полезна для обнаружения файла utf-8 вместо обычного текста ascii. Файл utf-8 отличается от файла ascii только расширенными символами, и это невозможно обнаружить без разбора всего файла, пока он не найдет его, когда псевдо-BOM сделает его видимым мгновенно.(КСТАТИ Emacs является очень эффективным, чтобы сделать такое автоматическое определение)

  • FYI, ВОМ следующие байты как первые байты файла:

    • UTF-16LE: FF FE
    • UTF-16BE : FE FF
    • UTF-8: EF BB BF
  • вы можете попросить Emacs открыть файл без какого-либо преобразования с find-file-literally: если первая строка начинается с  вы видите недекодированную UTF-8 BOM

Как @wvxvw сказал, ваш вопрос является вероятным отсутствием BOM в начале файла, который сделал это неверно истолковано и оказали , BTW, M-x hexl-mode - также очень удобный инструмент для проверки исходного содержимого файла. Спасибо, что указали это мне (я часто использую для этого внешний редактор hex, хотя это можно сделать непосредственно в Emacs).

+0

Большое спасибо! После того, как я вернул кодировку с ** utf-8 ** на ** utf-8-with-signature ** в Emacs, мобильный браузер * chrome * мог корректно отображать php-страницу. Я нахожу [эту страницу] (http://www.unicode.org/faq/utf_bom.html#utf8-2), и я знаю, что ** Там, где спецификация используется с UTF-8, она используется только как кодировка подпись, чтобы отличать UTF-8 от других кодировок **. И у меня возникает вопрос, почему ** utf-8 & BOM ** работает, пока ** utf-8 ** не работает на Chrome браузера Chrome, но оба они работают на ПК-хроме. Это недостаток мобильного браузера? – flyer

+0

Согласно [этой странице] (http://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Coding.html), я набрал ** Cx utf-8-with-signature * * но он не смог преобразовать файл из кода файла в ** utf-8-with-signature **, если я не изменяю файл ** ~/.emacs ** и не устанавливаю код utf-8-with- подпись. Есть ли простой способ конвертировать код файла в ** utf-8-with-signature ** в Emacs? – flyer

+0

@flyer: у вас должна быть опечатка: чтобы указать кодировку для команды, вы должны следовать 'Cx RET' с помощью' f' (кодировка, используемая при сохранении), 'r' (перезагрузить файл с кодировкой) или' c' (кодировка для следующей команды). Если я открою файл ascii, тогда 'C-x RET f utf-8-with-signature RET', за которым следует' C-x C-s', файл будет сохранен в новой кодировке (Emacs24) – Seki

2

Не могу много говорить о проблеме, за исключением того, что после установки

(prefer-coding-system 'utf-8) 
(setq coding-system-for-read 'utf-8) 
(setq coding-system-for-write 'utf-8) 

У меня не было никаких проблем Юникода более 2-х лет.

+0

Благодарим вас за советы. После установки кодировки ** utf-8-with-signature ** это работает. : D – flyer

+0

Я использую: (pre-coding-system 'utf-8) (set-default-coding-systems' utf-8) (setq-default buffer-file-coding-system 'utf-8) В помощи для кодирования-системы-для-{читать, писать} говорится, что вы не должны использовать их. – jpkotta

+0

Я думаю, что документ ссылается на разработчиков пакетов не на пользователя. Я имею в виду, что я был бы счастлив, если бы какой-то пакет изменил это предпочтение для меня. Но я знаю, как я хочу, чтобы мои файлы читались и сохранялись. –

Смежные вопросы