JavaScript dosyalarını sıkıştırıyorum ve sıkıştırıcı dosyalarımın içinde 
karakter olduğundan şikayet ediyor .
Bu karakterleri nasıl arayabilir ve kaldırabilirim?
JavaScript dosyalarını sıkıştırıyorum ve sıkıştırıcı dosyalarımın içinde 
karakter olduğundan şikayet ediyor .
Bu karakterleri nasıl arayabilir ve kaldırabilirim?
U+FEFF
bir BOM için kullanılan Unicode kod noktasıdır, ancak BOM'un kendisi bu kod noktasının nasıl kodlandığıdır (UTF-8:, 0xEF 0xBB 0xBF
UTF-16LE:, 0xFF 0xFE
UTF-16BE:, 0xFE 0xFF
vb.). Dolayısıyla, söz konusu dosyalar UTF-8 kodludur ve sıkıştırıcı bunları gerçek Unicode kod noktalarına dönüştürürken algılamaktadır.
Yanıtlar:
perl -pi~ -CSD -e 's/^\x{fffe}//' file1.js path/to/file2.js
Dosyalarınızda başka utf-8 varsa aracın bozulacağını varsayabilirim, ancak yoksa bu geçici çözüm size yardımcı olabilir. (Test edilmemiş ...)
Düzenle : -CSD
seçenek, tchrist'in yorumuna göre eklendi.
-CSD
anahtarla veya PERL_UNICODE
kısaltılabilir olarak ayarlanmış olarak çalıştırmanız gerekir SD
.
perl -CSD -pe 's/^\x{feff}//' file.csv
şuna geçmek zorunda kaldım :, <fffe> ile <feff> arasındaki değişikliği not edin.
Bunları vim kullanarak kolayca kaldırabilirsiniz , işte adımlar:
1) Terminalinizde vim kullanarak dosyayı açın:
vim file_name
2) Tüm BOM karakterlerini kaldırın :
:set nobomb
3) Dosyayı kaydedin:
:wq
Bu karakterleri kaldırmak için başka bir yöntem - Vim kullanarak :
vim -b dosyaAdı
Artık bu "gizli" karakterler görünür ( <feff>
) ve kaldırılabilir.
Önceki cevaplar için teşekkürler, işte her ihtimale karşı bir sed (1) varyantı:
sed '1s/^\xEF\xBB\xBF//'
Unix / Linux'ta:
sed 's/\xEF\xBB\xBF//' < inputfile > outputfile
MacOSX'te
sed $'s/\xEF\xBB\xBF//' < inputfile > outputfile
Mac için sed'den sonra $ 'a dikkat edin.
Windows'ta
Sed'in geliştirilmiş bir versiyonu Super Sed var . Windows için bu, komut satırından çalıştırılması amaçlanan bağımsız bir .exe'dir.
$'\xEF\xBB\xBF//'
bir Bash özelliğidir, özellikle bir Mac veya OSX özelliği değildir. Bu yapıyla Bash, komut satırını 'a geçmeden önce kaçış dizilerini gerçek baytlara ayrıştıracaktır sed
. sed
Varyantınıza bağlı olarak , bu işe yarayabilir veya çalışmayabilir (yine de OSX kullanıcılarının kendileri için kutudan çıkması gerektiğini bilmelerinin yararlı olduğuna eminim).
@ tripleee'nin çözümü benim için işe yaramadı. Ancak dosya kodlamasını ASCII ve tekrar UTF-8 olarak değiştirmek hile yaptı :-)
Bunun için vimgrep kullandım
:vim "[\uFEFF]" *
ayrıca normal vim arama komutu
/[\uFEFF]
'Dosya' komutu, BOM'un mevcut olup olmadığını gösterir:
Örneğin: 'dosya myfile.xml' şunu görüntüler: "XML 1.0 belgesi, UTF-8 Unicode (BOM ile) metin, çok uzun satırlar, CRLF satır sonlandırıcılar ile"
dos2unix, BOM'u kaldıracaktır.
Windows'ta UnxUtils'ten geriye dönük yeniden kodlama yardımcı programını kullanabilirsiniz .
In Sublime Text yükleyebilirsiniz İşaretleyici paketi ve ardından kullanıcı ayarlarında normal ifade özelleştirin.
Burada mülkün \uFEFF
sonuna ekledim 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
}
Varsayılan paket ayarlarının üzerine yazmak için dosyayı buraya yerleştirin:
~ / .config / sublime-text-3 / Packages / User / highlighter.sublime-settings
"Dos2unix" aracının kullanılmasını öneriyorum, lütfen çalıştırmak için test edin dos2unix ./thefile.js
.
Gerekirse birden çok dosya için şuna benzer bir şey kullanmayı deneyin:
for x in $(find . -type f -exec echo {} +); do dos2unix $x ; done
Saygılarımla.
bomstrip
find . -type f -exec dos2unix '{}' +
Dosyayı kod imzası olmadan kaydedin.
<U+FEFF>
yani,<0xEF,0xBB,0xBF>
sen başlığını değiştirmek gerekir, böylece bu UTF8 dosyalarının BOM olduğunu. Bunları nasıl çıkarmak istersiniz? Sihirli periler tarafından mı? Komut satırı aracıyla mı? Tek tek düzenleyerek mi? Notepad ++, BOM olmadan kodlamayı UTF8 olarak değiştirebilir. Örneğin, 5 saniyelik "şerit BOM utf8" i Google'da araştırıyorum Bunu