UTF-8 파일에서 BOM을 제거하는 방법은 무엇입니까?

UTF-8 파일에서 BOM을 제거하는 방법은 무엇입니까?

BOM이 포함된 UTF-8 인코딩 파일이 있는데 BOM을 제거하고 싶습니다. 파일에서 BOM을 제거하는 Linux 명령줄 도구가 있습니까?

$ file test.xml
test.xml:  XML 1.0 document, UTF-8 Unicode (with BOM) text, with very long lines

답변1

파일에 UTF-8 BOM이 포함되어 있는지 확실하지 않은 경우 (가상 GNU 구현 sed) BOM이 있으면 삭제하고, 없으면 변경하지 않습니다.

sed '1s/^\xEF\xBB\xBF//' < orig.txt > new.txt

다음 옵션을 사용하여 기존 파일을 덮어쓸 수도 있습니다 -i.

sed -i '1s/^\xEF\xBB\xBF//' orig.txt

BSD 버전(예: macOS)을 사용하는 경우 sedbash가 이스케이프를 수행하도록 해야 합니다.

 sed $'1s/\xef\xbb\xbf//' < orig.txt > new.txt

답변2

UTF-8에서는 BOM이 의미가 없습니다. 이는 일반적으로 Microsoft 운영 체제의 가짜 소프트웨어 버그로 인해 추가됩니다.

dos2unix이는 제거되고 Windows 텍스트 파일의 다른 특성이 처리됩니다.

dos2unix test.xml

답변3

VIM 사용

  1. VIM에서 파일을 엽니다.

     vi text.xml
    
  2. BOM 인코딩 삭제:

     :set nobomb
    
  3. 파일을 저장하고 종료합니다.

     :x
    

비대화형 솔루션의 경우 다음 명령줄을 사용해 보세요.

vi -c ":set nobomb" -c ":wq" text.xml

이렇게 하면 BOM이 삭제되고, 파일이 저장되고, 명령줄이 모두 종료됩니다.

답변4

이를 위해 나는 종종 vim one-liner를 사용합니다.

vim --clean -c 'se nobomb|wq' filename

vim --clean -c 'bufdo se nobomb|wqa' filename1 filename2 ...

관련 정보