Ce n'est pas <U+FEFF>, c'est <0xEF,0xBB,0xBF>la nomenclature des fichiers UTF8, vous devez donc changer le titre. Comment souhaitez-vous les supprimer? Par des fées magiques? Par l'outil de ligne de commande? En éditant un par un? Notepad ++ peut changer le codage en UTF8 sans BOM. Par exemple, en googlant 5 secondes de "strip BOM utf8", j'ai trouvé ceci pour Linux: ueber.net/who/mjl/projects/bomstrip
xanatos
1
Cela pourrait vous aider à obtenir une réponse spécifiquement liée à votre problème si vous nous indiquiez quel outil javascript vous utilisez pour effectuer la compression, sur quelle plate-forme et quels autres outils font partie de votre processus de construction.
SingleNegationElimination
15
Les nomenclatures en UTF-8 sont absolument grossières. Vous devez trouver le producteur de ce fichier et lui dire de le couper en @ # %%.
tchrist le
4
@peterflynn: U+FEFFest le point de code Unicode utilisé pour une nomenclature, mais la nomenclature elle-même est la façon dont ce point de code est codé (UTF-8 :, 0xEF 0xBB 0xBFUTF-16LE 0xFF 0xFE:, UTF-16BE:, 0xFE 0xFFetc.). Les fichiers en question sont donc encodés en UTF-8, ce que le compresseur détecte lors de leur décodage en points de code Unicode réels.
Remy Lebeau
4
@xanatos Indépendamment de ce que c'est, c'est ainsi que cela se manifeste, et c'est ainsi que les gens peuvent facilement trouver cette question à l'aide des moteurs de recherche.
Je suppose que l'outil se cassera si vous avez d'autres utf-8 dans vos fichiers, mais sinon, cette solution de contournement peut peut-être vous aider. (Non testé ...)
Edit : ajout de l' -CSDoption, selon le commentaire de tchrist.
Vous devez exécuter avec le -CSDcommutateur, ou avec la valeur PERL_UNICODEenvariable définie sur SD, pour que cela fonctionne.
tchrist le
Regexp fonctionne bien pour supprimer le caractère <fffe> au début d'une ligne, pour remplacer tous les caractères <fffe> dans une ligne: 's / \ x {fffe} // g'.
Diego Pino du
2
Sous Mac OSX, j'ai dû passer à perl -CSD -pe 's/^\x{feff}//' file.csv:, notez le changement de <fffe> à <feff>.
mpettis le
1
@mpettis Ce n'est donc pas une nomenclature, mais une nomenclature avec les octets inversés. Cela peut arriver sur n'importe quelle plate-forme, si vous convertissez UTF-16 en UTF-8 et que l'ordre des octets est erroné (même si le but de la nomenclature est d'éviter cette erreur!)
tripleee
1
@blong Et ça? Posez une question distincte si vous ne pouvez pas la comprendre (mais elle sera probablement marquée comme un doublon; premier hit google stackoverflow.com/questions/1712188/… )
tripleee
185
Vous pouvez facilement les supprimer à l'aide de vim , voici les étapes:
1) Dans votre terminal, ouvrez le fichier en utilisant vim:
vim file_name
2) Supprimez tous les caractères de la nomenclature :
D'autres sources suggèrent d'ajouter le chiffre 1 au motif, comme dans "sed '1 s / \ xEF \ xBB \ xBF //'", pour ne correspondre qu'à la première ligne. Cependant, pour moi sur Mac OS X, aucune des deux méthodes ne fonctionne.
Marian
1
Cela a fonctionné et était la meilleure solution pour moi. Merci Monsieur!
Vance Lucas
1
J'ai adoré cette solution. Le plus simple à mettre en œuvre et toujours évolutif ... :)
Piko
1
@Marian Un peu tard, mais vous pouvez vérifier la réponse de Masum qui montre pourquoi cela n'a pas fonctionné sur mac.
Quelqu'un vous utilise toujours MS-DOS
1
Ajoutez -i à sed pour mettre à jour le (s) fichier (s) avec les modifications.
Johan
17
Sous Unix / Linux:
sed 's/\xEF\xBB\xBF//' < inputfile > outputfile
Sur MacOSX
sed $'s/\xEF\xBB\xBF//' < inputfile > outputfile
Notez le $ après sed pour mac.
Sous Windows
Il y a Super Sed une version améliorée de sed. Pour Windows, il s'agit d'un .exe autonome, destiné à être exécuté à partir de la ligne de commande.
"Notez le $ après sed pour mac." - Merci Monsieur!
Quelqu'un vous utilise toujours MS-DOS
1
La chaîne Bash "C-style" $'\xEF\xBB\xBF//'est une fonctionnalité Bash, pas particulièrement une fonctionnalité Mac ou OSX. Avec cette structure, Bash analysera les séquences d'échappement en octets réels avant de passer la ligne de commande à sed. Selon votre sedvariante, cela peut ou non fonctionner (même si je suis sûr qu'il est utile pour les utilisateurs d'OSX de savoir que cela devrait fonctionner immédiatement pour eux).
La commande 'fichier' indique si la nomenclature est présente:
Par exemple: 'file myfile.xml' affiche: "Document XML 1.0, texte UTF-8 Unicode (avec nomenclature), avec de très longues lignes, avec terminateurs de ligne CRLF"
J'ai aimé votre réponse - bomstripn'était pas facilement disponible sur mon mac - alors prenez le temps de vous donner la version simple:find . -type f -exec dos2unix '{}' +
<U+FEFF>
, c'est<0xEF,0xBB,0xBF>
la nomenclature des fichiers UTF8, vous devez donc changer le titre. Comment souhaitez-vous les supprimer? Par des fées magiques? Par l'outil de ligne de commande? En éditant un par un? Notepad ++ peut changer le codage en UTF8 sans BOM. Par exemple, en googlant 5 secondes de "strip BOM utf8", j'ai trouvé ceci pour Linux: ueber.net/who/mjl/projects/bomstripU+FEFF
est le point de code Unicode utilisé pour une nomenclature, mais la nomenclature elle-même est la façon dont ce point de code est codé (UTF-8 :,0xEF 0xBB 0xBF
UTF-16LE0xFF 0xFE
:, UTF-16BE:,0xFE 0xFF
etc.). Les fichiers en question sont donc encodés en UTF-8, ce que le compresseur détecte lors de leur décodage en points de code Unicode réels.Réponses:
Je suppose que l'outil se cassera si vous avez d'autres utf-8 dans vos fichiers, mais sinon, cette solution de contournement peut peut-être vous aider. (Non testé ...)
Edit : ajout de l'
-CSD
option, selon le commentaire de tchrist.la source
-CSD
commutateur, ou avec la valeurPERL_UNICODE
envariable définie surSD
, pour que cela fonctionne.perl -CSD -pe 's/^\x{feff}//' file.csv
:, notez le changement de <fffe> à <feff>.Vous pouvez facilement les supprimer à l'aide de vim , voici les étapes:
1) Dans votre terminal, ouvrez le fichier en utilisant vim:
2) Supprimez tous les caractères de la nomenclature :
3) Enregistrez le fichier:
la source
Une autre méthode pour supprimer ces caractères - en utilisant Vim :
Maintenant, ces caractères "cachés" sont visibles (
<feff>
) et peuvent être supprimés.la source
Merci pour les réponses précédentes, voici une variante sed (1) au cas où:
la source
Sous Unix / Linux:
Sur MacOSX
Notez le $ après sed pour mac.
Sous Windows
Il y a Super Sed une version améliorée de sed. Pour Windows, il s'agit d'un .exe autonome, destiné à être exécuté à partir de la ligne de commande.
la source
$'\xEF\xBB\xBF//'
est une fonctionnalité Bash, pas particulièrement une fonctionnalité Mac ou OSX. Avec cette structure, Bash analysera les séquences d'échappement en octets réels avant de passer la ligne de commande àsed
. Selon votresed
variante, cela peut ou non fonctionner (même si je suis sûr qu'il est utile pour les utilisateurs d'OSX de savoir que cela devrait fonctionner immédiatement pour eux).Utiliser tail pourrait être plus simple:
la source
La solution de @ tripleee n'a pas fonctionné pour moi. Mais changer le codage du fichier en ASCII et à nouveau en UTF-8 a fait l'affaire :-)
la source
J'ai utilisé vimgrep pour cela
commande de recherche vim également normale
la source
La commande 'fichier' indique si la nomenclature est présente:
Par exemple: 'file myfile.xml' affiche: "Document XML 1.0, texte UTF-8 Unicode (avec nomenclature), avec de très longues lignes, avec terminateurs de ligne CRLF"
dos2unix supprimera la nomenclature.
la source
Dans Windows , vous pouvez utiliser rétroportés recodage utilitaire à partir UnxUtils .
la source
Dans Sublime Text, vous pouvez installer le package Highlighter, puis personnaliser l'expression régulière dans vos paramètres utilisateur.
Ici j'ai ajouté
\uFEFF
à la fin de lahighlighter_regex
propriété.{ "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 }
Pour remplacer les paramètres par défaut du package, placez le fichier ici:
la source
Je suggère l'utilisation de l'outil "dos2unix", veuillez tester pour l'exécuter
dos2unix ./thefile.js
.Si nécessaire, essayez d'utiliser quelque chose comme ceci pour plusieurs fichiers:
Mes salutations.
la source
bomstrip
n'était pas facilement disponible sur mon mac - alors prenez le temps de vous donner la version simple:find . -type f -exec dos2unix '{}' +
Enregistrez le fichier sans signature de code.
la source