Unicode UTF-8をUnicodeとして表示する方法は?


12

Emacsで奇妙なエスケープコードを表示するUTF-8でエンコードされたテキストファイルがいくつかあります。たとえば、次のテキスト:

イスタクエスティオンプリモエクスポナムクイッドインテリゲンダムest per hoc nomen 'Deus'; secundo、respondebo ad quaestionem。

Emacsで次のように表示されます。

ここに画像の説明を入力してください

これはEmacsでのみ発生します。他のエディターはテキストを正しく表示します。この問題を修正するにはどうすればよいですか?


アップデート1

ファイルを呼び出しrevert-buffer-with-coding-systemて選択するとutf-8、正しく読み込まれます。そのため、Gillesが正しく推測したように、Emacsはファイルエンコーディングを検出していません。コード; -*- coding: utf-8 -*-をファイルに追加すると、Emacsが開き、正しく表示されます。


更新2

「UTF-8 with BOM encoding」でファイルを再エンコードしましたが、Emacsで問題なく表示されます。2つのタイプの違いはわかりませんが、EmacsはBOMされたタイプのみを認識しているようです。


EmacsはファイルをUTF-8として認識していません。初期化ファイルの内容は何ですか?Emacsのどのバージョンを実行していますか?emacs -qまたはでEmacsを起動すると、何か変更されますかemacs -Q
ジル 'SO-悪であるのをやめる'

他のUTF-8ファイルには問題ありません。GNU Emacs 24.4.4を実行しています。差異ありませんemacs -qemacs -Q
NVaughan

ああ、それが他のファイルと未処理の構成で動作する場合、その理由はおそらくファイルのどこかに無効なUTF-8が含まれていることです。...私はEmacsで教えする方法を見てみましょう
ジル「SO-停止されて悪」

回答:


10

何らかの理由で、EmacsはファイルをUTF-8として認識していません。コマンドC-x RET rrevert-buffer-with-coding-system)を実行してを入力することにより、EmacsにファイルをUTF-8として再度開かせることができますutf-8

EmacsがこのファイルをUTF-8として認識しなかった(他のファイルを認識した)理由は、無効なUTF-8シーケンスが含まれているためです。このシーケンスはescape-glyph、ファイルをUTF-8として再解釈した後、バックスラッシュとそれに続く別の色の3つの8進数(顔)として表示されます。このようなシーケンスを検索するには、C-M-sisearch-regexp)を実行し、

[^^@-~[:multibyte:]]

^@入力して入力しますC-q C-SPC(^^ = 0の文字で、2文字のシーケンスの曲折アクセントではなく、曲折アクセント記号の前の文字です)。

あなたは追加することにより、UTF-8のファイルを認識するようにEmacsを強制することができコーディングシステムファイルの変数をのようなもの置く:-*-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うーん。それから、他の人が(特にの下でemacs -Q)UTF-8として認識されない理由を理解できません。
ジル 'SO-悪であるのをやめる'

1

BOMについての質問に答えるのは遅れていますが、とにかくやるつもりです。

バイトオーダーマーク(BOM)は3バイトのシーケンス\ xef \ xbb \ xbfであり、ファイルの先頭で、コンテンツがUTF-8としてエンコードされていることをシステムおよびアプリケーションに示します。適切にメタデータであり、コンテンツの一部として扱われません。

ほとんどのアプリケーション(Emacsもその1つ)は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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.