To nie jest <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
xanatos
1
Odpowiedź, która konkretnie dotyczy Twojego problemu, może pomóc, jeśli powiesz nam, jakiego narzędzia javascript używasz do wykonywania kompresji, na jakiej platformie i jakie inne narzędzia są częścią procesu tworzenia.
SingleNegationElimination
15
BOMy w UTF-8 są absolutnie surowe. Musisz znaleźć producenta tego pliku i powiedzieć mu, aby usunął @ # %%.
tchrist
4
@peterflynn: U+FEFFto punkt kodowy Unicode używany dla BOM, ale sam BOM jest kodowany w ten sposób (UTF-8 0xEF 0xBB 0xBF:, UTF-16LE:, 0xFF 0xFEUTF-16BE: 0xFE 0xFFitd.). Zatem pliki, o których mowa, są zakodowane w UTF-8, które kompresor wykrywa podczas dekodowania ich do rzeczywistych punktów kodowania Unicode.
Remy Lebeau
4
@xanatos Niezależnie od tego, co to jest, tak się to objawia i tak ludzie mogą łatwo znaleźć to pytanie za pomocą wyszukiwarek.
Musisz uruchomić z -CSDprzełącznikiem lub z ustawieniem PERL_UNICODEenvariable na SD, aby to zadziałało.
tchrist
Regexp działa OK do usuwania znaku <fffe> na początku linii, aby zastąpić wszystkie znaki <fffe> w linii: 's / \ x {fffe} // g'.
Diego Pino
2
W systemie Mac OSX musiałem zmienić na perl -CSD -pe 's/^\x{feff}//' file.csv:, zwróć uwagę na zmianę z <fffe> na <feff>.
mpettis
1
@mpettis To nie jest zestawienie komponentów, ale zestawienie komponentów z odwróconymi bajtami. Może się to zdarzyć na każdej platformie, jeśli przekonwertujesz UTF-16 na UTF-8 i źle
ustawisz
1
@blong A co z tym? Zadaj osobne pytanie, jeśli nie możesz tego
rozgryźć
185
Możesz je łatwo usunąć za pomocą vima , oto kroki:
Inne źródła sugerują dołączenie rysunku 1 do wzoru, jak w "sed '1 s / \ xEF \ xBB \ xBF //'", aby dopasować tylko pierwszą linię. Jednak dla mnie na Mac OS X żaden sposób nie działa.
Marian
1
To zadziałało i było dla mnie najlepszym rozwiązaniem. Dziękuję Panu!
Vance Lucas
1
Bardzo podobało mi się to rozwiązanie. Najłatwiejszy do wdrożenia i nadal skalowalny ... :)
Piko
1
@Marian Trochę późno, ale możesz sprawdzić odpowiedź Masuma, która pokazuje, dlaczego nie działa na Macu.
Ktoś nadal używa ciebie MS-DOS
1
Dodaj -i do seda, aby zaktualizować plik (i) ze zmianami.
Johan,
17
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ń.
„Zwróć uwagę na znak $ po sed dla komputerów Mac”. - Dziękuję Panu!
Ktoś nadal używa ciebie MS-DOS
1
Ciąg Bash „w stylu C” $'\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 sedwariantu 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).
Podobała mi się twoja odpowiedź - bomstripnie 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 '{}' +
<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/bomstripU+FEFF
to punkt kodowy Unicode używany dla BOM, ale sam BOM jest kodowany w ten sposób (UTF-80xEF 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:
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.źródło
-CSD
przełącznikiem lub z ustawieniemPERL_UNICODE
envariable naSD
, 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:
2) Usuń wszystkie znaki BOM :
3) Zapisz plik:
źródło
Inna metoda na usunięcie tych znaków - użycie Vima :
Teraz te „ukryte” znaki są widoczne (
<feff>
) i można je usunąć.źródło
Dzięki za poprzednie odpowiedzi, oto wariant sed (1) na wszelki wypadek:
źródło
W systemie Unix / Linux:
W systemie MacOSX
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ń.
źródło
$'\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ń dosed
. W zależności odsed
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).Używanie ogona może być łatwiejsze:
źródło
Rozwiązanie @ tripleee nie działa dla mnie. Ale zmiana kodowania pliku na ASCII i ponownie na UTF-8 załatwiła sprawę :-)
źródło
Użyłem do tego vimgrep
także zwykłe polecenie wyszukiwania vim
źródło
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.
źródło
W systemie Windows możesz użyć narzędzia do ponownego kodowania z UnxUtils .
źródło
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ńcahighlighter_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:
źródło
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:
Moje pozdrowienia.
źródło
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.
źródło