Das ist nicht <U+FEFF>, das ist <0xEF,0xBB,0xBF>die Stückliste von UTF8-Dateien, also sollten Sie den Titel ändern. Wie möchten Sie sie entfernen? Von magischen Feen? Mit dem Kommandozeilen-Tool? Durch einzelnes Bearbeiten? Notepad ++ kann die Codierung ohne Stückliste in UTF8 ändern. Zum Beispiel nur 5 Sekunden "Strip BOM utf8" googeln Ich habe dies für Linux gefunden: ueber.net/who/mjl/projects/bomstrip
xanatos
1
Es kann Ihnen helfen, eine Antwort zu erhalten, die sich speziell auf Ihr Problem bezieht, wenn Sie uns mitteilen, welches Javascript-Tool Sie für die Komprimierung verwenden, auf welcher Plattform und welche anderen Tools Teil Ihres Erstellungsprozesses sind.
SingleNegationElimination
15
Stücklisten in UTF-8 sind absolut grob. Sie müssen den Produzenten dieser Datei finden und ihm sagen, dass er sie mit @ # %% ausschneiden soll.
Tchrist
4
@peterflynn: U+FEFFist der für eine Stückliste verwendete Unicode-Codepunkt, aber die Stückliste selbst gibt an, wie dieser Codepunkt codiert wird (UTF-8 : 0xEF 0xBB 0xBF, UTF-16LE : 0xFF 0xFE, UTF-16BE : 0xFE 0xFF, usw.). Die fraglichen Dateien sind also UTF-8-codiert, was der Kompressor erkennt, wenn er sie in tatsächliche Unicode-Codepunkte decodiert.
Remy Lebeau
4
@xanatos Unabhängig davon, was es ist, manifestiert es sich auf diese Weise, und so können Menschen diese Frage mithilfe von Suchmaschinen leicht finden.
Ich würde annehmen, dass das Tool kaputt geht, wenn Sie andere utf-8 in Ihren Dateien haben, aber wenn nicht, kann Ihnen diese Problemumgehung vielleicht helfen. (Ungetestet ...)
Bearbeiten : Die -CSDOption wurde gemäß dem Kommentar von tchrist hinzugefügt .
Sie müssen mit dem -CSDSchalter oder mit der PERL_UNICODEVariablen auf ausführen SD, damit dies funktioniert.
Tchrist
Regexp funktioniert in Ordnung, wenn <fffe> -Zeichen am Zeilenanfang entfernt werden, um alle <fffe> -Zeichen in einer Zeile zu ersetzen: 's / \ x {fffe} // g'.
Diego Pino
2
Unter Mac perl -CSD -pe 's/^\x{feff}//' file.csvOS X musste ich zu: wechseln . Beachten Sie die Änderung von <fffe> zu <feff>.
mpettis
1
@mpettis Das ist dann keine Stückliste, sondern eine Stückliste mit umgekehrten Bytes. Es kann auf jeder Plattform passieren, wenn Sie UTF-16 in UTF-8 konvertieren und die falsche Bytereihenfolge erhalten (obwohl der Zweck der Stückliste darin besteht, diesen Fehler zu verhindern!)
Tripleee
1
@blong Was ist damit? Stellen Sie eine separate Frage, wenn Sie es nicht herausfinden können (aber es wird wahrscheinlich als Duplikat markiert; erster Google-Hit stackoverflow.com/questions/1712188/… )
Tripleee
185
Sie können sie einfach mit vim entfernen . Hier sind die Schritte:
1) Öffnen Sie in Ihrem Terminal die Datei mit vim:
Andere Quellen schlagen vor, die Zahl 1 wie in "sed '1 s / \ xEF \ xBB \ xBF //'" vor das Muster zu stellen, um nur der ersten Zeile zu entsprechen. Unter Mac OS X funktioniert dies jedoch nicht.
Marian
1
Dies funktionierte und war die beste Lösung für mich. Danke mein Herr!
Vance Lucas
1
Liebte diese Lösung. Am einfachsten zu implementieren und dennoch skalierbar ... :)
Piko
1
@Marian Ein bisschen spät, aber Sie können Masums Antwort überprüfen , die zeigt, warum es auf dem Mac nicht funktioniert hat.
Jemand benutzt Sie immer noch MS-DOS
1
Fügen Sie -i zu sed hinzu, um die Datei (en) mit den Änderungen zu aktualisieren.
Johan
16
Unter Unix / Linux:
sed 's/\xEF\xBB\xBF//' < inputfile > outputfile
Unter MacOSX
sed $'s/\xEF\xBB\xBF//' < inputfile > outputfile
Beachten Sie das $ after sed für Mac.
Unter Windows
Es gibt Super Sed, eine verbesserte Version von sed. Für Windows ist dies eine eigenständige EXE-Datei, die über die Befehlszeile ausgeführt werden kann.
"Beachten Sie das $ after sed für Mac." - Danke mein Herr!
Jemand benutzt Sie immer noch MS-DOS
1
Die Bash-Zeichenfolge im "C-Stil" $'\xEF\xBB\xBF//'ist eine Bash-Funktion, insbesondere keine Mac- oder OSX-Funktion. Mit diesem Konstrukt analysiert Bash die Escape-Sequenzen in tatsächliche Bytes, bevor die Befehlszeile an übergeben wird sed. Abhängig von Ihrer sedVariante kann dies funktionieren oder auch nicht (obwohl ich sicher bin, dass es für OSX-Benutzer nützlich ist, zu wissen, dass es für sie sofort funktionieren sollte).
Tripleee
1
vielleicht sed -i 's /.../.../'
Arthur
5
Die Verwendung des Schwanzes könnte einfacher sein:
Der Befehl 'Datei' zeigt an, ob die Stückliste vorhanden ist:
Beispiel: 'Datei myfile.xml' zeigt Folgendes an: "XML 1.0-Dokument, UTF-8-Unicode-Text (mit Stückliste), mit sehr langen Zeilen, mit CRLF-Zeilenabschlüssen"
Ich mochte Ihre Antwort - bomstripwar auf meinem Mac nicht leicht verfügbar - also nehmen Sie sich Zeit, um Ihnen die einfache Version zu geben:find . -type f -exec dos2unix '{}' +
<U+FEFF>
, das ist<0xEF,0xBB,0xBF>
die Stückliste von UTF8-Dateien, also sollten Sie den Titel ändern. Wie möchten Sie sie entfernen? Von magischen Feen? Mit dem Kommandozeilen-Tool? Durch einzelnes Bearbeiten? Notepad ++ kann die Codierung ohne Stückliste in UTF8 ändern. Zum Beispiel nur 5 Sekunden "Strip BOM utf8" googeln Ich habe dies für Linux gefunden: ueber.net/who/mjl/projects/bomstripU+FEFF
ist der für eine Stückliste verwendete Unicode-Codepunkt, aber die Stückliste selbst gibt an, wie dieser Codepunkt codiert wird (UTF-8 :0xEF 0xBB 0xBF
, UTF-16LE :0xFF 0xFE
, UTF-16BE :0xFE 0xFF
, usw.). Die fraglichen Dateien sind also UTF-8-codiert, was der Kompressor erkennt, wenn er sie in tatsächliche Unicode-Codepunkte decodiert.Antworten:
Ich würde annehmen, dass das Tool kaputt geht, wenn Sie andere utf-8 in Ihren Dateien haben, aber wenn nicht, kann Ihnen diese Problemumgehung vielleicht helfen. (Ungetestet ...)
Bearbeiten : Die
-CSD
Option wurde gemäß dem Kommentar von tchrist hinzugefügt .quelle
-CSD
Schalter oder mit derPERL_UNICODE
Variablen auf ausführenSD
, damit dies funktioniert.perl -CSD -pe 's/^\x{feff}//' file.csv
OS X musste ich zu: wechseln . Beachten Sie die Änderung von <fffe> zu <feff>.Sie können sie einfach mit vim entfernen . Hier sind die Schritte:
1) Öffnen Sie in Ihrem Terminal die Datei mit vim:
2) Entfernen Sie alle Stücklistenzeichen :
3) Speichern Sie die Datei:
quelle
Eine andere Methode, um diese Zeichen zu entfernen - mit Vim :
Jetzt sind diese "versteckten" Zeichen sichtbar (
<feff>
) und können entfernt werden.quelle
Vielen Dank für die vorherigen Antworten. Hier ist eine sed (1) -Variante für alle Fälle:
quelle
Unter Unix / Linux:
Unter MacOSX
Beachten Sie das $ after sed für Mac.
Unter Windows
Es gibt Super Sed, eine verbesserte Version von sed. Für Windows ist dies eine eigenständige EXE-Datei, die über die Befehlszeile ausgeführt werden kann.
quelle
$'\xEF\xBB\xBF//'
ist eine Bash-Funktion, insbesondere keine Mac- oder OSX-Funktion. Mit diesem Konstrukt analysiert Bash die Escape-Sequenzen in tatsächliche Bytes, bevor die Befehlszeile an übergeben wirdsed
. Abhängig von Ihrersed
Variante kann dies funktionieren oder auch nicht (obwohl ich sicher bin, dass es für OSX-Benutzer nützlich ist, zu wissen, dass es für sie sofort funktionieren sollte).Die Verwendung des Schwanzes könnte einfacher sein:
quelle
@ Tripleees Lösung hat bei mir nicht funktioniert. Aber das Ändern der Dateicodierung auf ASCII und erneut auf UTF-8 hat den Trick getan :-)
quelle
Ich habe dafür Vimgrep verwendet
auch normaler vim Suchbefehl
quelle
Der Befehl 'Datei' zeigt an, ob die Stückliste vorhanden ist:
Beispiel: 'Datei myfile.xml' zeigt Folgendes an: "XML 1.0-Dokument, UTF-8-Unicode-Text (mit Stückliste), mit sehr langen Zeilen, mit CRLF-Zeilenabschlüssen"
dos2unix entfernt die Stückliste.
quelle
In Windows können Sie das Backported Recode- Dienstprogramm von UnxUtils verwenden .
quelle
In Sublime Text können Sie das Highlighter-Paket installieren und dann den regulären Ausdruck in Ihren Benutzereinstellungen anpassen.
Hier habe ich
\uFEFF
am Ende deshighlighter_regex
Grundstücks hinzugefügt .Um die Standardpaketeinstellungen zu überschreiben, platzieren Sie die Datei hier:
quelle
Ich empfehle die Verwendung des Tools "dos2unix". Bitte testen, um es auszuführen
dos2unix ./thefile.js
.Versuchen Sie gegebenenfalls, so etwas für mehrere Dateien zu verwenden:
Schöne Grüße.
quelle
bomstrip
war auf meinem Mac nicht leicht verfügbar - also nehmen Sie sich Zeit, um Ihnen die einfache Version zu geben:find . -type f -exec dos2unix '{}' +
Speichern Sie die Datei ohne Codesignatur.
quelle