Bagaimana cara menampilkan Unicode UTF-8 sebagai Unicode?

12

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:

masukkan deskripsi gambar di sini

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-systemdan memilih utf-8file 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.

NVaughan
sumber
Emacs tidak mengenali file sebagai UTF-8. Apa isi file init Anda? Versi Emacs apa yang Anda jalankan? Apakah itu mengubah apa pun jika Anda memulai Emacs dengan emacs -qatau emacs -Q?
Gilles 'SO- stop being evil'
Saya tidak punya masalah dengan file UTF-8 lainnya. Saya menjalankan GNU Emacs 24.4.4. Tidak ada perbedaan dengan emacs -qatau emacs -Q.
NVaughan
Ah, jika ia bekerja dengan file lain dan dalam konfigurasi murni maka alasannya mungkin karena file tersebut juga mengandung UTF-8 yang tidak valid di suatu tempat. Biarkan saya melihat bagaimana cara memberi tahu dengan Emacs ...
Gilles 'SANGAT berhenti menjadi jahat'
kemungkinan terkait: emacs.stackexchange.com/q/4100/2264
Sean Allred

Jawaban:

10

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 memasukkan utf-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-glyphwajah) setelah menafsirkan ulang file sebagai UTF-8. Anda dapat mencari urutan seperti itu dengan menjalankan C-M-s( isearch-regexp) dan mencari

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

di mana ^@dimasukkan dengan mengetik C-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, tetapi Local Variables:dan End:harus muncul persis seperti ini dengan trailing colon):

# Local Variables:
# coding: utf-8
# End:

Emacs memilih pengkodean sesuai dengan mana file ditafsirkan berdasarkan beberapa pengaturan, terutama lingkungan bahasa dan variabel auto-coding-alistdan auto-coding-regexp-alist. Karena Anda memiliki masalah yang sama dengan file ini bahkan ketika berjalan emacs -Q, saya pikir ini bukan masalah dengan pengaturan itu, tetapi dengan konten file.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Jika saya membuka file tanpa variabel file sistem pengkodean (yaitu ketika menampilkan file yang salah) dan menjalankan pencarian regex, semua saya \342, \200, \230, dll bisa dipilih. Tetapi jika saya membukanya "dengan benar" (menggunakan variabel pengkodean), maka tidak ada hasil pencarian yang muncul.
NVaughan
@NVaughan Hmmm. Maka saya tidak mengerti mengapa file ini tidak dikenali sebagai UTF-8 ketika orang lain (terutama di bawah emacs -Q).
Gilles 'SO- stop being evil'
1

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.

Dijawab Dengan Sengaja
sumber
-1

Hanya untuk sistem mirip UNIX.

Dalam banyak kasus definisi pengodean langsung dalam ~ / .bashrc ~ / bash_profile

LANG=en_EN.UTF8

dicapai dengan

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8

di ~ /. profil harus menyelesaikan masalah Anda.

PS Setelah koreksi ini, Anda perlu RELOGIN di sesi Anda untuk memungkinkan perubahan menjadi terlihat.

Alioth
sumber
Meskipun apa yang Anda katakan mungkin berguna, ini tampaknya tidak menjawab pertanyaan ini, karena masalahnya hanya dengan beberapa file utf-8.
JeanPierre
Misalkan setelah definisi pengkodean yang ketat dalam konfigurasi file masalah ini mungkin akan lenyap untuk semua file selamanya berakhir pernah :-)
Alioth