Saya melakukan kompresi file JavaScript dan kompresor mengeluh bahwa file saya memiliki 
karakter di dalamnya.
Bagaimana cara mencari karakter ini dan menghapusnya?
Saya melakukan kompresi file JavaScript dan kompresor mengeluh bahwa file saya memiliki 
karakter di dalamnya.
Bagaimana cara mencari karakter ini dan menghapusnya?
U+FEFF
adalah titik kode Unicode yang digunakan untuk BOM, tetapi BOM itu sendiri adalah cara titik kode itu dikodekan (UTF-8 :, 0xEF 0xBB 0xBF
UTF-16LE 0xFF 0xFE
:, UTF-16BE:, 0xFE 0xFF
dll). Jadi, file yang dipermasalahkan adalah dikodekan UTF-8, yang dideteksi oleh kompresor saat mendekodekannya ke titik kode Unicode yang sebenarnya.
Jawaban:
perl -pi~ -CSD -e 's/^\x{fffe}//' file1.js path/to/file2.js
Saya akan menganggap alat tersebut akan rusak jika Anda memiliki utf-8 lain di file Anda, tetapi jika tidak, mungkin solusi ini dapat membantu Anda. (Belum teruji ...)
Edit : menambahkan -CSD
opsi, sesuai komentar tchrist.
-CSD
sakelar, atau dengan PERL_UNICODE
set envariable ke SD
, agar berfungsi.
perl -CSD -pe 's/^\x{feff}//' file.csv
:, perhatikan perubahan dari <fffe> menjadi <feff>.
Anda dapat dengan mudah menghapusnya menggunakan vim , berikut langkah-langkahnya:
1) Di terminal Anda, buka file menggunakan vim:
vim file_name
2) Hapus semua karakter BOM :
:set nobomb
3) Simpan file:
:wq
Metode lain untuk menghapus karakter tersebut - menggunakan Vim :
vim -b nama file
Sekarang karakter "tersembunyi" itu terlihat ( <feff>
) dan dapat dihapus.
Terima kasih atas jawaban sebelumnya, inilah varian sed (1) untuk berjaga-jaga:
sed '1s/^\xEF\xBB\xBF//'
Di Unix / Linux:
sed 's/\xEF\xBB\xBF//' < inputfile > outputfile
Di MacOSX
sed $'s/\xEF\xBB\xBF//' < inputfile > outputfile
Perhatikan $ after sed untuk mac.
Di Windows
Ada Super Sed versi sed yang disempurnakan. Untuk Windows, ini adalah .exe mandiri, dimaksudkan untuk dijalankan dari baris perintah.
$'\xEF\xBB\xBF//'
adalah fitur Bash, bukan fitur Mac atau OSX. Dengan cara ini, Bash akan mengurai urutan escape menjadi byte sebenarnya sebelum meneruskan baris perintah ke sed
. Bergantung pada sed
varian Anda , ini mungkin atau mungkin tidak berfungsi (meskipun saya yakin itu berguna bagi pengguna OSX untuk mengetahui bahwa itu harus bekerja di luar kotak untuk mereka).
Solusi @ tripleee tidak berhasil untuk saya. Tetapi mengubah pengkodean file ke ASCII dan lagi ke UTF-8 berhasil :-)
Saya telah menggunakan vimgrep untuk ini
:vim "[\uFEFF]" *
juga perintah pencarian vim normal
/[\uFEFF]
Perintah 'file' menunjukkan jika BOM ada:
Misalnya: 'file myfile.xml' menampilkan: "Dokumen XML 1.0, teks UTF-8 Unicode (dengan BOM), dengan garis yang sangat panjang, dengan terminator baris CRLF"
dos2unix akan menghapus BOM.
Di windows Anda dapat menggunakan utilitas pengodean ulang yang di- backport dari UnxUtils .
Di Sublime Text Anda dapat menginstal paket Highlighter dan kemudian menyesuaikan ekspresi reguler di pengaturan pengguna Anda.
Di sini saya menambahkan \uFEFF
ke akhir highlighter_regex
properti.
{
"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
}
Untuk menimpa pengaturan paket default, letakkan file di sini:
~ / .config / sublime-text-3 / Packages / User / highlighter.sublime-settings
Saya menyarankan penggunaan alat "dos2unix", silakan uji untuk dijalankan dos2unix ./thefile.js
.
Jika perlu coba gunakan sesuatu seperti ini untuk banyak file:
for x in $(find . -type f -exec echo {} +); do dos2unix $x ; done
Salam Hormat.
bomstrip
tidak tersedia dengan mudah di mac saya - jadi find . -type f -exec dos2unix '{}' +
Simpan file tanpa tanda tangan kode.
<U+FEFF>
, itu adalah<0xEF,0xBB,0xBF>
BOM dari file UTF8, jadi Anda harus mengubah judulnya. Bagaimana Anda ingin menghapusnya? Oleh peri ajaib? Dengan alat baris perintah? Dengan mengedit satu per satu? Notepad ++ dapat mengubah pengkodean menjadi UTF8 tanpa BOM. Misalnya hanya googling 5 detik dari "strip BOM utf8" Saya telah menemukan ini untuk Linux: ueber.net/who/mjl/projects/bomstrip