Kompresuję pliki JavaScript, a kompresor narzeka, że moje pliki mają 
charakter.
Jak mogę wyszukać te znaki i je usunąć?
Kompresuję pliki JavaScript, a kompresor narzeka, że moje pliki mają 
charakter.
Jak mogę wyszukać te znaki i je usunąć?
U+FEFF
to punkt kodowy Unicode używany dla BOM, ale sam BOM jest kodowany w ten sposób (UTF-8 0xEF 0xBB 0xBF
:, UTF-16LE:, 0xFF 0xFE
UTF-16BE: 0xFE 0xFF
itd.). Zatem pliki, o których mowa, są zakodowane w UTF-8, które kompresor wykrywa podczas dekodowania ich do rzeczywistych punktów kodowania Unicode.
Odpowiedzi:
perl -pi~ -CSD -e 's/^\x{fffe}//' file1.js path/to/file2.js
Zakładam, że narzędzie się zepsuje, jeśli masz w plikach inny utf-8, ale jeśli nie, być może to obejście może ci pomóc. (Niesprawdzone ...)
Edycja : dodano -CSD
opcję, zgodnie z komentarzem tchrista.
-CSD
przełącznikiem lub z ustawieniem PERL_UNICODE
envariable na SD
, aby to zadziałało.
perl -CSD -pe 's/^\x{feff}//' file.csv
:, zwróć uwagę na zmianę z <fffe> na <feff>.
Możesz je łatwo usunąć za pomocą vima , oto kroki:
1) W terminalu otwórz plik za pomocą vima:
vim file_name
2) Usuń wszystkie znaki BOM :
:set nobomb
3) Zapisz plik:
:wq
Inna metoda na usunięcie tych znaków - użycie Vima :
vim -b nazwa_pliku
Teraz te „ukryte” znaki są widoczne ( <feff>
) i można je usunąć.
Dzięki za poprzednie odpowiedzi, oto wariant sed (1) na wszelki wypadek:
sed '1s/^\xEF\xBB\xBF//'
W systemie Unix / Linux:
sed 's/\xEF\xBB\xBF//' < inputfile > outputfile
W systemie MacOSX
sed $'s/\xEF\xBB\xBF//' < inputfile > outputfile
Zwróć uwagę na $ po sed dla mac.
W systemie Windows
Istnieje Super Sed , ulepszona wersja seda. W systemie Windows jest to samodzielny plik .exe, przeznaczony do uruchamiania z wiersza poleceń.
$'\xEF\xBB\xBF//'
jest funkcją Bash, a nie szczególnie funkcją Mac lub OSX. Dzięki temu konstruktowi Bash przeanalizuje sekwencje ucieczki do rzeczywistych bajtów przed przekazaniem wiersza poleceń do sed
. W zależności od sed
wariantu może to działać lub nie (chociaż jestem pewien, że użytkownicy OSX powinni wiedzieć, że powinno to działać dla nich po wyjęciu z pudełka).
Rozwiązanie @ tripleee nie działa dla mnie. Ale zmiana kodowania pliku na ASCII i ponownie na UTF-8 załatwiła sprawę :-)
Użyłem do tego vimgrep
:vim "[\uFEFF]" *
także zwykłe polecenie wyszukiwania vim
/[\uFEFF]
Polecenie „plik” pokazuje, czy zestawienie komponentów jest obecne:
Na przykład: „plik mojplik.xml” wyświetla: „Dokument XML 1.0, tekst UTF-8 Unicode (z BOM), z bardzo długimi liniami, z zakończeniami linii CRLF”
dos2unix usunie BOM.
W systemie Windows możesz użyć narzędzia do ponownego kodowania z UnxUtils .
W Sublime Text możesz zainstalować pakiet Highlighter, a następnie dostosować wyrażenie regularne w ustawieniach użytkownika.
Tutaj dodałem \uFEFF
do końca highlighter_regex
posesji.
{
"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
}
Aby nadpisać domyślne ustawienia pakietu, umieść plik tutaj:
~ / .config / sublime-text-3 / Packages / User / highlighter.sublime-settings
Sugeruję użycie narzędzia "dos2unix", proszę przetestować, aby uruchomić dos2unix ./thefile.js
.
W razie potrzeby spróbuj użyć czegoś takiego dla wielu plików:
for x in $(find . -type f -exec echo {} +); do dos2unix $x ; done
Moje pozdrowienia.
bomstrip
nie była łatwo dostępna na moim Macu - więc poświęciłem trochę czasu, aby dać ci prostą wersję:find . -type f -exec dos2unix '{}' +
Zapisz plik bez podpisu kodu.
<U+FEFF>
, to<0xEF,0xBB,0xBF>
jest BOM plików UTF8, więc powinieneś zmienić tytuł. Jak chcesz je usunąć? Przez magiczne wróżki? Za pomocą narzędzia wiersza poleceń? Edytując pojedynczo? Notepad ++ może zmienić kodowanie na UTF8 bez BOM. Na przykład tylko wygooglowanie 5 sekund „strip BOM utf8”. Znalazłem to dla Linuksa: ueber.net/who/mjl/projects/bomstrip