<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
圧縮を実行するために使用しているjavascriptツール、プラットフォーム、およびビルドプロセスの一部である他のツールを教えていただければ、問題に特に関連する回答を得るのに役立つ場合があります。
singleNegationElimination 2011

15
UTF-8のBOMは絶対的なクラッドです。そのファイルのプロデューサーを見つけて、@#%%を切り取るように指示する必要があります。
tchrist 2011

4
@peterflynn:U+FEFFはBOMに使用されるUnicodeコードポイントですが、BOM自体がそのコードポイントのエンコード方法です(UTF-8:0xEF 0xBB 0xBF、UTF-16LE:0xFF 0xFE、UTF-16BE:0xFE 0xFFなど)。したがって、問題のファイルはUTF-8でエンコードされており、実際のUnicodeコードポイントにデコードするときにコンプレッサーが検出します。
Remy Lebeau 2015年

4
@xanatosそれが何であるかに関係なく、これはそれがどのように現れるかであり、それは人々が検索エンジンを使用してこの質問を簡単に見つけることができる方法です。
BartoszKP 2015

回答:


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

ファイルに他のutf-8があるとツールが壊れると思いますが、そうでない場合は、この回避策が役立つ可能性があります。(テストされていません...)

編集-CSDtchristのコメントに従って、オプションを追加しました。


1
これを機能させるには、-CSDスイッチを使用するか、PERL_UNICODE変数をに設定して実行する必要がありSDます。
tchrist 2011

正規表現は、行の先頭にある<fffe>文字を削除して、行内のすべての<fffe>文字を置き換える場合に正常に機能します: 's / \ x {fffe} // g'。
ディエゴ・ピノ

2
Mac OSXでは、次のように変更する必要がありました。perl -CSD -pe 's/^\x{feff}//' file.csv<fffe>から<feff>への変更に注意してください。
mpettis 2014

1
@mpettisこれはBOMではありませんが、バイトが逆になっているBOMです。UTF-16をUTF-8に変換し、バイト順序を間違えた場合(BOMの目的はそのエラーを防ぐことですが!)、どのプラットフォームでも発生する可能性があります
Tripleee 2014年

1
@blongそれはどうですか?あなたはそれを理解できない場合は別の質問をする(ただし、それはおそらく重複としてマークされます。最初にGoogleがヒットstackoverflow.com/questions/1712188/...を
tripleee

185

vimを使用して簡単に削除できます。手順は次のとおりです。

1)ターミナルで、vimを使用してファイルを開きます。

vim file_name

2)すべてのBOM文字を削除します。

:set nobomb

3)ファイルを保存します:

:wq

この解決策は私のために働いた。選択した回答よりも簡単です。ありがとう
szydan 2014年

私は通常emacsのパーティザンですが、この優れたソリューションを使用しました。vim ftw
エレンスペルトゥス

30

それらの文字を削除する別の方法-Vimを使用:

vim -b fileName

これで、これらの「非表示」文字が表示され(<feff>)、削除できます。


20

以前の回答に感謝します。念のため、sed(1)バリアントを次に示します。

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

1
他の情報源は、「sed '1 s / \ xEF \ xBB \ xBF //'」のように、最初の行のみに一致するように、図1をパターンの前に追加することを提案しています。ただし、Mac OS Xの私にとっては、どちらの方法も機能しません。
マリアン

1
これはうまくいき、私にとって最良の解決策でした。ありがとうございます!
ヴァンスルーカス

1
このソリューションが気に入りました。実装が最も簡単で、スケーラブルです... :)
Piko 2015

1
@Marian少し遅れましたが、Macで動作しなかった理由を示すMasumの回答を確認できます。
誰かがまだあなたを使用していますMS-DOS

1
sedに-iを追加して、変更を加えてファイルを更新します。
ヨハン

17

Unix / Linuxの場合:

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

MacOSXの場合

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

Mac用のsedの後の$に注意してください。

Windowsの場合

あるスーパーセッドのsedの拡張バージョンは。Windowsの場合、これはスタンドアロンの.exeであり、コマンドラインから実行することを目的としています。


1
「Mac用にsedした後の$に注意してください。」- ありがとうございます!
誰かがまだあなたを使用していますMS-DOS

1
Bashの「Cスタイル」文字列$'\xEF\xBB\xBF//'はBashの機能であり、特にMacやOSXの機能ではありません。この構造により、Bashはコマンドラインをに渡す前にエスケープシーケンスを実際のバイトに解析しsedます。sedバリアントによっては、これが機能する場合と機能しない場合があります(ただし、OSXユーザーにとっては、箱から出してすぐに機能するはずだということを知っておくと便利です)。
トリプリー2015

1
多分sed-i's /.../.../ '
アーサー

6

テールの使用は簡単かもしれません:

tail --bytes=+4 filename > new_filename

1
ファイルのプロデューサーがBOMを削除した後、この手法は失敗します。スケーラブルではありません... :)
Piko 2015

4

@tripleeeのソリューションは私にはうまくいきませんでした。しかし、ファイルエンコーディングをASCIIに変更し、再びUTF-8に変更すると、うまくいきました:-)


3

私はこれにvimgrepを使用しました

:vim "[\uFEFF]" *

また、通常のvim検索コマンド

/[\uFEFF]

2

'file'コマンドは、BOMが存在するかどうかを示します。

例: 'file myfile.xml'は次のように表示します: "XML 1.0ドキュメント、UTF-8 Unicode(BOM付き)テキスト、非常に長い行、CRLF行末記号付き"

dos2unixはBOMを削除します。



1

Sublime Textでは、蛍光ペンパッケージをインストールしてから、ユーザー設定で正規表現をカスタマイズできます。

ここ\uFEFFで、highlighter_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.