10

Emacs では、入力後

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

たとえば、utf-8utf-8-auto-unixutf-8-emacs-unixなど、多くのタイプの「utf-8」を確認できました。

それらの違いは何なのか知りたいです。

私はそれらをグーグルで検索しましたが、適切な答えが見つかりませんでした。

PS

数か月前にエンコーディングの問題に遭遇したため、この質問をします。私は Emacs で php プログラムを書き、~/.emacsに設定しました

(prefer-coding-system 'utf-8)

しかし、ブラウザでphpページを閲覧すると、書いたのにエンコーディングの問題でブラウザがコンテンツを正しく表示できないことがわかりました

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

ページで。

しかし、notepad++を使用してファイルを utf-8 で保存した後、ブラウザーはコンテンツを正しく表示できました。

だから、Emacs でのエンコーディングについてもっと学びたいと思っています。

4

2 に答える 2

13

エンコーディング名の最後の部分 (例: macin ) は、通常、行末でutf-8-mac使用される特殊文字を記述します。

  • -mac: CR、MacOS の標準の行区切り文字 (OS X まで)
  • -unix: LFunice システムの標準の区切り文字 (BSD ベースの Mac OS X)
  • -dos: CR+LFDOS / Windows の区切り文字

いくつかの追加のエンコーディング パラメータには、次のものがあります。

  • -emacs: すべての Emacs 文字のエンコードのサポート (非 Unicode を含む)
  • -with-signature: BOM の使用を強制します (以下を参照)
  • -auto: BOM を自動検出します

さまざまな可能性を組み合わせて、Emacs に表示されるリストを作成できます。

エンコーディングによって提供される行末、BOM、および文字セットのタイプに関する情報を取得するには、、describe-coding-systemまたは次を使用できます。C-hC

BOM について:

  • utf-16utf 標準では、バイトの順序 (utf-16 は 2 バイトまたは 16 ビットで文字を格納するため) またはエンディアンをエンコードするために(テキスト) ファイルの先頭に配置する特別な署名を定義します: 一部のシステム最上位バイトを最初に配置する (ビッグエンディアン -> utf-16be) 他のいくつかは、最下位バイトを最初に配置します (リトルエンディアン -> utf-16le)。その署名はBOMと呼ばれます: Byte Order Mark

  • ではutf-8、各文字は 1 バイトで表されます (127 を超える拡張文字は例外で、特殊なバイト シーケンスを使用します)。したがって、バイト オーダーを指定することは意味がありませんが、このシグネチャはとにかく、utf-8 ファイルの代わりに utf-8 ファイルを検出するのに役立ちます。プレーンテキストASCII。utf-8 ファイルは、拡張文字のみが ASCII ファイルと異なります。疑似 BOM によってすぐに表示されるようになるまで、ファイル全体を解析しないと検出できません。(ところで、Emacs はそのような自動検出を行うのに非常に効率的です)

  • 参考までに、BOM はファイルの最初のバイトとして次のバイトです。

    • utf-16le :FF FE
    • utf-16be :FE FF
    • utf-8 :EF BB BF
  • 変換せずにファイルを開くように Emacs に指示できますfind-file-literally: 最初の行が で始まる場合、デコードされていない utf-8 BOM が表示されます。

  • エンコーディングをいじる際の追加のヘルプについては、この補足的な回答「Emacs でエンコーディングを表示する方法」を参照してください。

@wvxvw が言ったように、あなたの問題は、ファイルの先頭に BOM が不足しているため、誤って解釈およびレンダリングされた可能性があります。ところで、M-x hexl-modeファイルの生のコンテンツをチェックするための非常に便利なツールでもあります。指摘してくれてありがとう(Emacsで直接行うこともできますが、そのために外部の16進エディタをよく使用します)

于 2013-07-25T17:36:05.173 に答える
2

設定後を除いて、問題について多くを語ることはできません

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

2年以上ユニコードの問題はありません。

于 2013-07-25T15:53:04.437 に答える