2012-02-01 2 views
10

Sto utilizzando un file Javascript che è una concatenazione di altri file JavaScript.Rimuovi più BOM da un file

Sfortunatamente, la persona che ha concatenato insieme questi file JavaScript non ha utilizzato la codifica corretta durante la lettura del file e ha consentito a una distinta base di ogni singolo file JavaScript di essere scritta nel file JavaScript concatenato.

Qualcuno conosce un modo semplice per cercare nel file concatenato e rimuovere tutti/tutti i marcatori BOM?

Utilizzare PHP o uno script di bash per Mac OSX sarebbe fantastico.

+0

l'hai provato utilizzando Notepad ++, encodage> selezionare quello che dovrebbe essere lì, riconvertirlo in utf8-NoBoms –

+1

cosa è un file JavaScript compilato? Sicuramente vuoi dire concatenato o cosa? – mario

+0

Sì, concatenato, modificato. –

risposta

13

Consulta anche: Using awk to remove the Byte-order mark

per rimuovere più distinte base da qualsiasi punto all'interno di un file di testo si può provare qualcosa di simile. Basta lasciare il ^ ancoraggio: (.. Questa modifica il file sul posto, ma crea un backup file.js~)

perl -e 's/\xef\xbb\xbf//;' -pi~ file.js 

0

ho anche capito questa soluzione che funziona interamente in PHP:

$packed = pack("CCC",0xef,0xbb,0xbf); 
$contents = preg_replace('/'.$packed.'/','',$contents); 
+1

Probabilmente è più facile digitare '" \ xef \ xbb \ xbf "', vedi [escape escape con doppia stringa] (http://www.php.net/manual/en/language.types.string.php#language.types .string.syntax.double). – Wrikken

13

faccio normalmente utilizzando vim:

vim -c "set nobomb" -c wq! myfile 
+0

Questo ha funzionato per me. Non riuscivo a ottenere il comando 'sed' per spogliarli. – ibic

0

recuperare file BOM

grep -rIlo $’^\xEF\xBB\xBF’ ./

rimuovere i file BOM

grep -rIlo $’^\xEF\xBB\xBF’ . | xargs sed –in-place -e ‘s/\xef\xbb\xbf//’

escludere .svn dir

grep -rIlo –exclude-dir=”.svn” $’^\xEF\xBB\xBF’ . | xargs sed –in-place -e ‘s/\xef\xbb\xbf//’