ฉันใช้ Emacs เพื่อแก้ไขไฟล์ XML ที่แอปพลิเคชันอื่นอ่านด้วย แอปพลิเคชันอื่นต้องการให้ไฟล์เริ่มต้นด้วยตัวทำเครื่องหมายคำสั่งไบต์ (BOM) อย่างไรก็ตามดูเหมือนว่า Emac จะลบ BOM ทุกครั้งที่ฉันแก้ไขไฟล์ มีวิธีที่จะทำให้ Emacs ปล่อย BOM อยู่คนเดียวหรือไม่?
ฉันใช้ Emacs เพื่อแก้ไขไฟล์ XML ที่แอปพลิเคชันอื่นอ่านด้วย แอปพลิเคชันอื่นต้องการให้ไฟล์เริ่มต้นด้วยตัวทำเครื่องหมายคำสั่งไบต์ (BOM) อย่างไรก็ตามดูเหมือนว่า Emac จะลบ BOM ทุกครั้งที่ฉันแก้ไขไฟล์ มีวิธีที่จะทำให้ Emacs ปล่อย BOM อยู่คนเดียวหรือไม่?
คำตอบ:
Emacs จะเขียน BOM หรือไม่ขึ้นอยู่กับระบบการเข้ารหัสที่ใช้ Emacs เลือกระบบการเข้ารหัสที่จะใช้โดยอัตโนมัติเมื่อไปที่ไฟล์
คุณสามารถเปลี่ยนระบบการเข้ารหัสเป็น utf-8-with-signature ซึ่งจะบอกให้ Emacs เขียน BOM
หากต้องการเปลี่ยนระบบการเข้ารหัสของไฟล์ที่เข้าชม `C-x RET r utf-8-with-RET RET '
คุณสามารถตั้งค่าระบบการเข้ารหัสที่ Emacs ใช้สำหรับไฟล์เฉพาะโดยการตั้งค่า ตัวแปรไฟล์ . ดูส่วนปรับด้วยตนเอง 57.3.4 ตัวแปรท้องถิ่นในไฟล์ เพื่อเรียนรู้วิธีการทำ
ติดตามผลตอบรับของ Richard Hoskins: ถ้าคุณ ไม่เคย ต้องการให้ BOM ถูกซ่อนโดย emacs คุณสามารถปิดการใช้งานการเข้ารหัส * -with-signature ด้วยตัวอย่างนี้:
(setq auto-coding-regexp-alist
(delete (rassoc 'utf-16be-with-signature auto-coding-regexp-alist)
(delete (rassoc 'utf-16le-with-signature auto-coding-regexp-alist)
(delete (rassoc 'utf-8-with-signature auto-coding-regexp-alist)
auto-coding-regexp-alist))))
BOM คือ U + FEFF,“ พื้นที่ไม่ทำลายความกว้างเป็นศูนย์”, และไม่ปรากฏเป็นกล่องใน emacs ของฉัน 23.1.1— แทนบรรทัดบนสุดของไฟล์ถูกเลื่อนลงเล็กน้อยและบางครั้งกล่อง ปรากฏขึ้นรอบ ๆ บรรทัดแรก - แต่คุณจะเห็นว่า BOM อยู่ตรงนั้นและลบออกถ้าจำเป็น
Emacs "ตัวเอง" ไม่ควรยุ่งกับ BOM; ถ้ามันทำอย่างนั้นจริง ๆ มันจะต้องเป็นรหัสที่ใช้ Emacs "mode" ที่คุณใช้เพื่อแก้ไขไฟล์ XML ของคุณซึ่งจะลบ BOM เนื่องจากคุณไม่ได้บอกว่าเป็นไฟล์ไหนฉันจึงสามารถอ้างอิงถึงเอกสารของโหมดนั้นหรือเปิดไฟล์ใน fundamental-mode
(หรือโหมดไม่ทำลายที่คล้ายกัน) หรือลอง M-x find-file-literally
ถ้าทุกอย่างอื่นล้มเหลว
find-file-literally
แล้วทำ M-x sgml-mode
BOM จะไม่ถูกลบ เนื่องจากอักขระพิเศษไม่ได้เข้ารหัส UTF-8 เมื่อเยี่ยมชมไฟล์อย่างแท้จริงจึงเป็นการดีที่จะทราบว่าในการแปลงรูปแบบพื้นฐานและรหัสการแปลงรหัสอักขระที่ BOM ถูกลบ