답변:
Emacs는 사용중인 코딩 시스템에 따라 BOM을 작성하거나 작성하지 않습니다. Emacs는 파일을 방문 할 때 사용하는 코딩 시스템을 자동으로 선택합니다.
코딩 시스템을 utf-8-with-signature로 변경하면 Emacs가 BOM을 작성하도록 지시합니다.
방문한 파일의 코딩 시스템을 변경하려면
C-x RET r utf-8-with-signature RET
파일 변수 를 설정하여 Emacs가 특정 파일에 사용하는 코딩 시스템을 설정할 수 있습니다 . 이를 수행하는 방법을 배우 려면 훌륭한 매뉴얼 섹션 57.3.4 파일의 로컬 변수를 참조하십시오 .
리처드 호스킨스의 대답에 후속 다음과 같은 경우에 결코 는 BOM이 이맥스 숨길 수 싶지,이 조각과 함께 * 가진 - - 서명 코딩을 해제 할 수 있습니다 :
(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이며 "폭이 0이 아닌 공간"이며 이맥스 23.1.1에서 상자로 표시되지 않습니다. 대신 파일의 맨 위 줄이 약간 아래로 이동하고 때로는 상자가 첫 번째 줄 주위에 표시되지만 BOM이 있음을 확인하고 필요한 경우 삭제하십시오.
이맥스 "자체"는 BOM을 망쳐서는 안됩니다. 실제로 그렇게하고 있다면 BOM을 제거하는 XML 파일을 편집하는 데 사용하는 Emacs "모드"를 구현하는 코드 여야합니다. 어느 쪽인지 말하지 않기 때문에 해당 모드에 대한 설명서 만 참조하거나 파일을 fundamental-mode
(또는 유사한 비파괴 모드) 열면 됩니다. 또는 M-x find-file-literally
다른 모든 것이 실패하면 시도 하십시오.
find-file-literally
어떻게 다음과 M-x sgml-mode
의 BOM이 제거되지 않습니다. 특수 문자는 문자 그대로 파일을 방문 할 때 UTF-8로 인코딩되지 않기 때문에 기본 형식 변환 및 문자 코드 변환 코드에서 BOM이 제거되는 위치를 알아내는 것이 좋습니다.
필자의 테스트에서 UTF-8
파일을 편집 해도 인코딩이 변경되지 않고 BOM이 유지됩니다 ( efbb bf
). (nxml 모드)
그런데,이 사이에서 변할 수 xml-mode
및 nxml-mode
또는 이맥스 버전 (24 대 26). 하단에 모드가 표시됩니다.
유니 코드 ( UTF-16
little endian)로 인코딩 된 XML 파일 인 Emacs를 편집 하면 인코딩이 UTF-16
big endian으로 변경됩니다 . 아마 그가 말한 것일 수도 있습니다.
그러나 BOM은 변경, 아직 거기 fffe
에 ffef
, 그리고 널 대신 짝수 바이트의 홀수 바이트에 있습니다. hexl 모드에서 볼 수 있습니다.
샘플 xml 파일. 인코딩 속성은 emacs가 xml-mode 또는 nxml-mode로 저장할 때 인코딩을 지시합니다. BOM을 먼저 확인하기 위해 향후 버전이 패치됩니다.
<?xml version="1.0" encoding="UTF-16"?>
<hi />
Emacs는 UTF-16
으로 UTF-16BE
, Windows는 UTF-16LE
(BE 및 LE는 Emacs에서 인코딩 속성으로 작동하지 않습니다)로 사용합니다. 인코딩 속성은 아마도 여기서 문제의 핵심 일 것입니다.
Powershell에 저장하면 utf-16le로 다시 변환됩니다.
[xml]$xml = get-content test.xml; $xml.save('test.xml')
encoding = "UTF-16LE"및 encoding = "UTF-16BE"를 사용하면 bom이 제거되어 파일을 emacs에서 인식 할 수 없습니다. 이것은 패치 될 확인 된 버그입니다 : http://lists.gnu.org/archive/html/bug-gnu-emacs/2019-05/msg00892.html