ทำให้ emacs ไม่ลบ BOM ออกจากไฟล์ XML


8

ฉันใช้ Emacs เพื่อแก้ไขไฟล์ XML ที่แอปพลิเคชันอื่นอ่านด้วย แอปพลิเคชันอื่นต้องการให้ไฟล์เริ่มต้นด้วยตัวทำเครื่องหมายคำสั่งไบต์ (BOM) อย่างไรก็ตามดูเหมือนว่า Emac จะลบ BOM ทุกครั้งที่ฉันแก้ไขไฟล์ มีวิธีที่จะทำให้ Emacs ปล่อย BOM อยู่คนเดียวหรือไม่?


นี่คือเหตุผลที่เมื่อฉันแก้ไขไฟล์ xml สำหรับ schtasks มันเปลี่ยนการเข้ารหัสจาก unicode เป็น unicode big endian แล้วไม่ทำงาน
js2010

คำตอบ:


9

Emacs จะเขียน BOM หรือไม่ขึ้นอยู่กับระบบการเข้ารหัสที่ใช้ Emacs เลือกระบบการเข้ารหัสที่จะใช้โดยอัตโนมัติเมื่อไปที่ไฟล์

คุณสามารถเปลี่ยนระบบการเข้ารหัสเป็น utf-8-with-signature ซึ่งจะบอกให้ Emacs เขียน BOM

หากต้องการเปลี่ยนระบบการเข้ารหัสของไฟล์ที่เข้าชม `C-x RET r utf-8-with-RET RET '

คุณสามารถตั้งค่าระบบการเข้ารหัสที่ Emacs ใช้สำหรับไฟล์เฉพาะโดยการตั้งค่า ตัวแปรไฟล์ . ดูส่วนปรับด้วยตนเอง 57.3.4 ตัวแปรท้องถิ่นในไฟล์ เพื่อเรียนรู้วิธีการทำ


ยอดเยี่ยมคำตอบที่ฉันหวังไว้! ขอบคุณ!
Vebjorn Ljosa

5

ติดตามผลตอบรับของ 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 อยู่ตรงนั้นและลบออกถ้าจำเป็น


1

Emacs "ตัวเอง" ไม่ควรยุ่งกับ BOM; ถ้ามันทำอย่างนั้นจริง ๆ มันจะต้องเป็นรหัสที่ใช้ Emacs "mode" ที่คุณใช้เพื่อแก้ไขไฟล์ XML ของคุณซึ่งจะลบ BOM เนื่องจากคุณไม่ได้บอกว่าเป็นไฟล์ไหนฉันจึงสามารถอ้างอิงถึงเอกสารของโหมดนั้นหรือเปิดไฟล์ใน fundamental-mode (หรือโหมดไม่ทำลายที่คล้ายกัน) หรือลอง M-x find-file-literally ถ้าทุกอย่างอื่นล้มเหลว


ใช้โหมด xml (เช่นโหมด sgml) แต่ปัญหานั้นน่าจะอยู่ที่อื่น: ถ้าฉันเปิดไฟล์ find-file-literally แล้วทำ M-x sgml-modeBOM จะไม่ถูกลบ เนื่องจากอักขระพิเศษไม่ได้เข้ารหัส UTF-8 เมื่อเยี่ยมชมไฟล์อย่างแท้จริงจึงเป็นการดีที่จะทราบว่าในการแปลงรูปแบบพื้นฐานและรหัสการแปลงรหัสอักขระที่ BOM ถูกลบ
Vebjorn Ljosa
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.