<0xEF, 0xBB, 0xBF> 문자가 파일에 표시됩니다. 그들을 제거하는 방법?


86

JavaScript 파일을 압축하고 있는데 압축기가 파일에 문자가 있다고 불평 합니다.

이러한 문자를 검색하고 제거하려면 어떻게해야합니까?


16
그건 아닌 <U+FEFF>즉, <0xEF,0xBB,0xBF>당신이 제목을 변경해야하므로, 즉 UTF8 파일의 BOM입니다. 어떻게 제거 하시겠습니까? 마법의 요정들? 명령 줄 도구로? 하나씩 편집하여? Notepad ++는 BOM없이 인코딩을 UTF8로 변경할 수 있습니다. 예를 들어 "strip BOM utf8"을 5 초 동안 검색하여 Linux 용으로 찾았습니다. ueber.net/who/mjl/projects/bomstrip
xanatos

1
압축을 수행하는 데 사용중인 자바 스크립트 도구, 플랫폼 및 빌드 프로세스의 일부인 다른 도구를 알려 주면 문제와 관련된 답변을 얻는 데 도움이 될 수 있습니다.
SingleNegationElimination

15
UTF-8의 BOM은 절대적입니다. 해당 파일의 제작자를 찾아서 @ # %%를 잘라내라고 지시해야합니다.
tchrist

4
@peterflynn : U+FEFF은 BOM에 사용되는 유니 코드 코드 포인트이지만 BOM 자체는 해당 코드 포인트가 인코딩되는 방법입니다 (UTF-8 : 0xEF 0xBB 0xBF, UTF-16LE : 0xFF 0xFE, UTF-16BE : 0xFE 0xFF등). 따라서 문제의 파일은 UTF-8로 인코딩되어 있으며 압축기는이를 실제 유니 코드 코드 포인트로 디코딩 할 때 감지합니다.
Remy Lebeau

4
@xanatos 그것이 무엇이든간에 이것이 어떻게 나타나는지이며 사람들이 검색 엔진을 사용 하여이 질문을 쉽게 찾을 수있는 방법입니다.
BartoszKP 2015 년

답변:


18
perl -pi~ -CSD -e 's/^\x{fffe}//' file1.js path/to/file2.js

파일에 다른 utf-8이 있으면 도구가 중단 될 것이라고 생각하지만 그렇지 않은 경우이 해결 방법이 도움이 될 수 있습니다. (테스트되지 않은 ...)

편집 : -CSDtchrist의 의견 에 따라 옵션을 추가했습니다 .


1
작동하려면 -CSD스위치를 사용하거나 PERL_UNICODEenvariable을로 설정 하여 실행해야합니다 SD.
tchrist 2011 년

Regexp는 줄의 시작 부분에있는 <fffe> 문자를 제거하고 한 줄의 모든 <fffe> 문자를 바꾸는 데 적합합니다 : 's / \ x {fffe} // g'.
Diego Pino 2011

2
Mac OSX에서는 다음으로 변경해야했습니다. perl -CSD -pe 's/^\x{feff}//' file.csv, <fffe>에서 <feff> 로의 변경에 유의하십시오.
mpettis 2014

1
@mpettis 이것은 BOM이 아니라 바이트가 반전 된 BOM입니다. UTF-16을 UTF-8로 변환하고 바이트 순서가 잘못되면 모든 플랫폼에서 발생할 수 있습니다 (BOM의 목적이 오류를 방지하는
것이지만

1
@blong 그것은 어떻습니까? 알아낼 수없는 경우 별도의 질문을하십시오 (하지만 중복으로 표시 될 것입니다. 첫 번째 Google 히트 stackoverflow.com/questions/1712188/… )
tripleee

187

vim을 사용하여 쉽게 제거 할 수 있습니다 . 단계는 다음과 같습니다.

1) 터미널에서 vim을 사용하여 파일을 엽니 다.

vim file_name

2) 모든 BOM 문자 제거 :

:set nobomb

3) 파일 저장 :

:wq

이 솔루션은 저에게 효과적이었습니다. 선택한 답변보다 간단합니다. 감사합니다
szydan 2014

나는 일반적으로 emacs 당파이지만이 훌륭한 솔루션을 사용했습니다. FTW 정력
엘렌 스퍼터 스에게

31

이러한 문자를 제거하는 또 다른 방법 -Vim 사용 :

vim -b 파일 이름

이제 "숨겨진"문자가 표시되고 ( <feff>) 제거 할 수 있습니다.


20

이전 답변에 감사드립니다. 다음과 같은 경우를 대비하여 sed (1) 변형이 있습니다.

sed '1s/^\xEF\xBB\xBF//'

1
다른 소식통은 "sed '1 s / \ xEF \ xBB \ xBF //'"에서와 같이 그림 1을 패턴 앞에 추가하여 첫 번째 줄만 일치하도록 제안합니다. 그러나 Mac OS X에서는 어느 쪽도 작동하지 않습니다.
Marian

1
이것은 효과가 있었고 저에게 최고의 솔루션이었습니다. 감사합니다!
Vance Lucas

1
이 솔루션을 좋아했습니다. 가장 쉬운은 ... :) 확장 성이 여전히 구현하기
PIKO

1
@Marian 조금 늦었지만 Mac에서 작동하지 않는 이유를 보여주는 Masum의 답변 을 확인할 수 있습니다 .
누군가는 여전히 당신에게 MS-DOS 사용

1
sed에 -i를 추가하여 변경 사항으로 파일을 업데이트합니다.
Johan

17

Unix / Linux :

sed 's/\xEF\xBB\xBF//' < inputfile > outputfile

MacOSX에서

sed $'s/\xEF\xBB\xBF//' < inputfile > outputfile

Mac의 경우 sed 뒤에 $가 있습니다.

Windows에서

sed 의 향상된 버전 인 Super Sed 가 있습니다 . Windows의 경우 이것은 명령 줄에서 실행하기위한 독립 실행 형 .exe입니다.


1
"Mac 용 sed 후에 $를 확인하십시오." - 감사합니다!
누군가는 여전히 당신에게 MS-DOS 사용

1
Bash "C 스타일"문자열 $'\xEF\xBB\xBF//'은 특히 ​​Mac 또는 OSX 기능이 아닌 Bash 기능입니다. 이 구조를 사용하면 Bash는 명령 줄을에 전달하기 전에 이스케이프 시퀀스를 실제 바이트로 구문 분석합니다 sed. sed변형 에 따라 작동하거나 작동하지 않을 수 있습니다 (OSX 사용자가 즉시 작동해야한다는 것을 아는 것이 유용하지만).
tripleee

1
아마 나오지도 -i의 /.../.../ '
아서

6

tail을 사용하는 것이 더 쉬울 수 있습니다.

tail --bytes=+4 filename > new_filename

1
이 기술은 파일 제작자가 BOM을 제거한 후에 실패합니다. 아니 확장 ... :)
PIKO

4

@tripleee의 솔루션이 저에게 효과적이지 않았습니다. 그러나 파일 인코딩을 ASCII로 변경하고 다시 UTF-8로 변경하면 트릭이 발생했습니다. :-)


3

나는 이것을 위해 vimgrep을 사용했습니다.

:vim "[\uFEFF]" *

일반 vim 검색 명령도

/[\uFEFF]

2

'file'명령은 BOM이 있는지 여부를 보여줍니다.

예 : 'file myfile.xml'은 "XML 1.0 문서, UTF-8 유니 코드 (BOM 포함) 텍스트, 매우 긴 줄, CRLF 줄 종결 자 포함"을 표시합니다.

dos2unix는 BOM을 제거합니다.



1

에서 숭고한 텍스트 당신은 설치할 수 있습니다 형광펜 패키지를 다음 사용자 설정에서 정규 표현식을 사용자 정의 할 수 있습니다.

여기 \uFEFFhighlighter_regex속성 끝에 추가 했습니다.

{
    "highlighter_enabled": true,
    "highlighter_regex": "(\t+ +)|( +\t+)|[\u2026\u2018\u2019\u201c\u201d\u2013\u2014\uFEFF]|[\t ]+$",
    "highlighter_scope_name": "invalid",
    "highlighter_max_file_size": 1048576,
    "highlighter_delay": 3000
}

기본 패키지 설정을 덮어 쓰려면 여기에 파일을 배치하십시오.

~ / .config / sublime-text-3 / Packages / User / highlighter.sublime-settings


1

"dos2unix"도구를 사용하는 것이 좋습니다 dos2unix ./thefile.js. 테스트하여 .

필요한 경우 여러 파일에 대해 다음과 같이 사용하십시오.

for x in $(find . -type f -exec echo {} +); do dos2unix $x ; done

나의 안부.


1
나는 당신의 대답이 마음에 들었습니다- bomstrip내 Mac에서 쉽게 구할 수 없었습니다-그래서 시간을내어 간단한 버전을 제공합니다.find . -type f -exec dos2unix '{}' +
dsz

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.