Saya memiliki beberapa file teks UTF-8-encoded yang menampilkan kode pelarian aneh di Emacs. Misalnya, teks ini:
Dalam ista quaestione primo exponam quid intelligenceend est est hoc nomen 'Deus'; secundo, respondebo ad quaestionem.
Ditampilkan seperti ini di Emacs:
Ini hanya terjadi di Emacs. Editor lain menunjukkan teks dengan benar. Bagaimana saya bisa memperbaiki masalah ini?
Perbarui 1
Jika saya menelepon revert-buffer-with-coding-system
dan memilih utf-8
file dibaca dengan benar. Jadi, seperti yang ditebak Gilles dengan benar, Emacs tidak mendeteksi penyandian file. Jika saya menambahkan kode ; -*- coding: utf-8 -*-
ke file, Emacs membuka dan menampilkannya dengan benar.
Perbarui 2
Saya memasukkan kembali file dalam "UTF-8 dengan pengkodean BOM," dan sekarang ini menampilkan baik-baik saja di Emacs. Saya tidak tahu apa perbedaan antara kedua jenis ini, tetapi Emacs tampaknya hanya menyadari yang BOM.
sumber
emacs -q
atauemacs -Q
?emacs -q
atauemacs -Q
.Jawaban:
Untuk beberapa alasan, Emacs tidak mengenali file tersebut sebagai UTF-8. Anda dapat memaksa Emacs untuk membuka kembali file sebagai UTF-8 dengan menjalankan perintah
C-x RET r
(revert-buffer-with-coding-system
) dan memasukkanutf-8
.Alasan mengapa Emacs tidak mengenali file ini sebagai UTF-8 (tetapi mengenali yang lain) kemungkinan berisi beberapa urutan UTF-8 yang tidak valid. Urutan ini masih akan muncul sebagai garis miring terbalik diikuti oleh tiga digit oktal dengan warna yang berbeda (
escape-glyph
wajah) setelah menafsirkan ulang file sebagai UTF-8. Anda dapat mencari urutan seperti itu dengan menjalankanC-M-s
(isearch-regexp
) dan mencaridi mana
^@
dimasukkan dengan mengetikC-q C-SPC
(itu karakter ^ @ = 0, bukan urutan dua karakter circumflex-at; karakter sebelum itu adalah karakter sirkumfleksa).Anda dapat memaksa Emacs untuk mengenali file sebagai UTF-8 dengan menambahkan variabel file sistem pengkodean : meletakkan sesuatu seperti
-*-coding: utf-8-*-
di baris pertama, atau meletakkan sesuatu seperti ini di dekat akhir file (Anda dapat mengganti#
dengan awalan apa pun, tetapiLocal Variables:
danEnd:
harus muncul persis seperti ini dengan trailing colon):Emacs memilih pengkodean sesuai dengan mana file ditafsirkan berdasarkan beberapa pengaturan, terutama lingkungan bahasa dan variabel
auto-coding-alist
danauto-coding-regexp-alist
. Karena Anda memiliki masalah yang sama dengan file ini bahkan ketika berjalanemacs -Q
, saya pikir ini bukan masalah dengan pengaturan itu, tetapi dengan konten file.sumber
\342
,\200
,\230
, dll bisa dipilih. Tetapi jika saya membukanya "dengan benar" (menggunakan variabel pengkodean), maka tidak ada hasil pencarian yang muncul.emacs -Q
).Sudah terlambat untuk menjawab pertanyaan tentang BOM, tapi bagaimanapun aku akan melakukannya.
Tanda urutan byte (BOM) adalah urutan tiga byte \ xef \ xbb \ xbf yang, pada awal file, menunjukkan ke sistem dan aplikasi yang isinya dikodekan sebagai UTF-8. Benar mereka metadata, tidak diperlakukan sebagai bagian dari isinya.
Sebagian besar aplikasi - Emacs adalah salah satunya - menghormati BOM dan menulis semua file UTF-8. Aplikasi lain mungkin menghargainya dalam membaca, tetapi tidak menulisnya; dan yang lain tidak tahu tentang hal itu dan mungkin melemparkan pesan kesalahan ketika mereka menemukannya. Dengan kata lain, situasinya berantakan. Saya lebih suka menggunakannya sedapat mungkin.
sumber
Hanya untuk sistem mirip UNIX.
Dalam banyak kasus definisi pengodean langsung dalam ~ / .bashrc ~ / bash_profile
dicapai dengan
di ~ /. profil harus menyelesaikan masalah Anda.
PS Setelah koreksi ini, Anda perlu RELOGIN di sesi Anda untuk memungkinkan perubahan menjadi terlihat.
sumber