Itu bukan <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
xanatos
1
Ini mungkin membantu Anda mendapatkan jawaban yang secara khusus berkaitan dengan masalah Anda jika Anda memberi tahu kami alat javascript apa yang Anda gunakan untuk melakukan kompresi, pada platform apa, dan alat lain apa yang merupakan bagian dari proses pembuatan Anda.
SingleNegationElimination
15
BOM di UTF-8 benar-benar mentah. Anda perlu mencari produser file itu dan memberi tahu mereka untuk memotong @ # %%.
tchrist
4
@peterflynn: U+FEFFadalah titik kode Unicode yang digunakan untuk BOM, tetapi BOM itu sendiri adalah cara titik kode itu dikodekan (UTF-8 :, 0xEF 0xBB 0xBFUTF-16LE 0xFF 0xFE:, UTF-16BE:, 0xFE 0xFFdll). Jadi, file yang dipermasalahkan adalah dikodekan UTF-8, yang dideteksi oleh kompresor saat mendekodekannya ke titik kode Unicode yang sebenarnya.
Remy Lebeau
4
@xanatos Terlepas dari apa itu, beginilah manifestasinya, dan begitulah cara orang dapat dengan mudah menemukan pertanyaan ini menggunakan mesin telusur.
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 -CSDopsi, sesuai komentar tchrist.
Anda perlu menjalankan dengan -CSDsakelar, atau dengan PERL_UNICODEset envariable ke SD, agar berfungsi.
tchrist
Regexp berfungsi dengan baik untuk menghapus karakter <fffe> di awal baris, untuk mengganti semua karakter <fffe> dalam satu baris: 's / \ x {fffe} // g'.
Diego Pino
2
Di Mac OSX, saya harus mengubah ke perl -CSD -pe 's/^\x{feff}//' file.csv:, perhatikan perubahan dari <fffe> menjadi <feff>.
mpettis
1
@mpettis Itu bukan BOM, tapi BOM dengan byte terbalik. Itu bisa terjadi pada platform apa pun, jika Anda mengonversi UTF-16 ke UTF-8 dan mendapatkan urutan byte yang salah (meskipun tujuan BOM adalah untuk mencegah kesalahan itu!)
tripleee
1
@blong Bagaimana dengan itu? Ajukan pertanyaan terpisah jika Anda tidak bisa mengetahuinya (tetapi mungkin akan ditandai sebagai duplikat; klik Google pertama stackoverflow.com/questions/1712188/… )
tripleee
188
Anda dapat dengan mudah menghapusnya menggunakan vim , berikut langkah-langkahnya:
Sumber lain menyarankan untuk menambahkan angka 1 ke pola, seperti dalam "sed '1 s / \ xEF \ xBB \ xBF //'", agar hanya cocok dengan baris pertama. Namun, bagi saya di Mac OS X, tidak ada cara yang berhasil.
Marian
1
Ini berhasil, dan merupakan solusi terbaik bagi saya. Terima kasih Pak!
Vance Lucas
1
Saya menyukai solusi ini. Paling mudah diterapkan dan masih dapat diskalakan ... :)
Piko
1
@ Marian Sedikit terlambat, tetapi Anda dapat memeriksa jawaban Masum yang menunjukkan mengapa ini tidak berfungsi di mac.
Seseorang masih menggunakan Anda MS-DOS
1
Tambahkan -i ke sed untuk memperbarui file dengan perubahan.
Johan
17
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.
"Perhatikan $ setelah sed untuk mac." - Terima kasih Pak!
Seseorang masih menggunakan Anda MS-DOS
1
String Bash "C-style" $'\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 sedvarian 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).
Misalnya: 'file myfile.xml' menampilkan: "Dokumen XML 1.0, teks UTF-8 Unicode (dengan BOM), dengan garis yang sangat panjang, dengan terminator baris CRLF"
<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/bomstripU+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-16LE0xFF 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:
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.sumber
-CSD
sakelar, atau denganPERL_UNICODE
set envariable keSD
, 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:
2) Hapus semua karakter BOM :
3) Simpan file:
sumber
Metode lain untuk menghapus karakter tersebut - menggunakan Vim :
Sekarang karakter "tersembunyi" itu terlihat (
<feff>
) dan dapat dihapus.sumber
Terima kasih atas jawaban sebelumnya, inilah varian sed (1) untuk berjaga-jaga:
sumber
Di Unix / Linux:
Di MacOSX
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.
sumber
$'\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 kesed
. Bergantung padased
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).Menggunakan ekor mungkin lebih mudah:
sumber
Solusi @ tripleee tidak berhasil untuk saya. Tetapi mengubah pengkodean file ke ASCII dan lagi ke UTF-8 berhasil :-)
sumber
Saya telah menggunakan vimgrep untuk ini
juga perintah pencarian vim normal
sumber
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.
sumber
Di windows Anda dapat menggunakan utilitas pengodean ulang yang di- backport dari UnxUtils .
sumber
Di Sublime Text Anda dapat menginstal paket Highlighter dan kemudian menyesuaikan ekspresi reguler di pengaturan pengguna Anda.
Di sini saya menambahkan
\uFEFF
ke akhirhighlighter_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:
sumber
Saya menyarankan penggunaan alat "dos2unix", silakan uji untuk dijalankan
dos2unix ./thefile.js
.Jika perlu coba gunakan sesuatu seperti ini untuk banyak file:
Salam Hormat.
sumber
bomstrip
tidak tersedia dengan mudah di mac saya - jadifind . -type f -exec dos2unix '{}' +
Simpan file tanpa tanda tangan kode.
sumber