Saya menggunakan Emacs untuk mengedit file XML yang juga dibaca oleh aplikasi lain. Aplikasi lain mensyaratkan bahwa file mulai dengan byte-order marker (BOM). Namun, Emacs sepertinya menghapus BOM setiap kali saya mengedit file. Apakah ada cara untuk membuat Emacs meninggalkan BOM sendirian?
8
Jawaban:
Emacs akan menulis BOM atau tidak tergantung pada sistem pengkodean apa yang digunakannya. Emacs secara otomatis memilih sistem pengkodean yang digunakannya ketika mengunjungi suatu file.
Anda dapat mengubah sistem kode ke utf-8-with-signature, yang akan memberi tahu Emacs untuk menulis BOM.
Untuk mengubah sistem pengkodean file yang dikunjungi:
Anda dapat mengatur sistem pengkodean yang digunakan Emacs untuk file tertentu dengan mengatur variabel file . Lihat bagian manual yang bagus 57.3.4 Variabel Lokal di File untuk mempelajari cara melakukannya.
sumber
Tindak lanjuti jawaban Richard Hoskins: jika Anda tidak ingin BOM disembunyikan oleh emacs, Anda dapat menonaktifkan kode * -dengan-tanda tangan dengan potongan ini:
BOM adalah U + FEFF, "nol-lebar ruang tanpa melanggar", dan tidak muncul sebagai kotak di emacs saya 23.1.1 — alih-alih, baris teratas file bergerak sedikit ke bawah, dan sebuah kotak kadang-kadang muncul di sekitar baris pertama — tetapi Anda dapat melihat bahwa BOM ada di sana, dan menghapusnya jika perlu.
sumber
Emacs "sendiri" tidak boleh main-main dengan BOM; jika benar-benar melakukan itu, maka itu harus menjadi kode yang menerapkan "mode" Emacs yang Anda gunakan untuk mengedit file XML Anda yang menghapus BOM. Karena Anda tidak mengatakan yang mana, saya hanya dapat merujuk Anda ke dokumentasi untuk mode itu, atau bahwa Anda membuka file dalam
fundamental-mode
(atau mode non-destruktif serupa). Atau cobaM-x find-file-literally
jika semuanya gagal.sumber
find-file-literally
dan kemudian lakukanM-x sgml-mode
, BOM tidak dihapus. Karena karakter khusus tidak dikodekan UTF-8 ketika mengunjungi file secara harfiah, akan lebih baik untuk mencari tahu di mana dalam konversi format yang mendasari dan kode konversi kode karakter BOM dihapus.Dalam pengujian saya, mengedit
UTF-8
file tidak mengubah penyandian dan BOM tetap (efbb bf
). (nxml-mode)Ya, ini bisa bervariasi antara
xml-mode
dannxml-mode
, atau versi emacs (24 vs 26). Dikatakan mode di bagian bawah.Jika Anda mengedit Emacs, file XML yang dikodekan dalam unicode (
UTF-16
little endian), itu akan mengubah pengkodean menjadiUTF-16
big endian. Mungkin itu yang dia bicarakan.Tetapi BOM masih ada, diubah dari
fffe
menjadiffef
, dan nol berada pada byte ganjil bukan byte genap. Anda dapat melihatnya dalam mode hexl.Contoh file xml. Atribut encoding mengarahkan encoding ketika emacs menyimpannya dalam mode xml atau mode nxml. Versi mendatang akan ditambal untuk memeriksa BOM terlebih dahulu.
Sepertinya Emacs mengambil
UTF-16
sebagaiUTF-16BE
, sedangkan Windows mengambil sebagaiUTF-16LE
(BE dan LE tidak melakukan pekerjaan di Emacs untuk atribut encoding). Atribut encoding mungkin kunci untuk masalah di sini.Menyimpannya di PowerShell akan mengubahnya kembali ke utf-16le.
Dengan encoding = "UTF-16LE" dan encoding = "UTF-16BE", bom dihapus, membuat file tidak dapat dikenali dalam emacs. Ini adalah bug yang dikonfirmasi yang akan ditambal: http://lists.gnu.org/archive/html/bug-gnu-emacs/2019-05/msg00892.html
sumber