web-dev-qa-db-fra.com

Caractère <0xEF, 0xBB, 0xBF> apparaissant dans les fichiers. Comment les supprimer?

Je suis en train de compresser des fichiers JavaScript et le compresseur se plaint que mes fichiers contiennent le caractère 

Comment puis-je rechercher ces personnages et les supprimer? 

78
Quintin Par
Perl -pi~ -CSD -e 's/^\x{fffe}//' file1.js path/to/file2.js

Je suppose que l'outil va casser si vous avez d'autres utf-8 dans vos fichiers, mais sinon, peut-être que cette solution de contournement peut vous aider. (Non testé ...)

Edit : ajout de l’option -CSD, conformément au commentaire de tchrist.

17
tripleee

Vous pouvez facilement les supprimer en utilisant vim, voici les étapes:

1) Dans votre terminal, ouvrez le fichier avec vim:

vim file_name

2) Supprimez tous les caractères BOM :

:set nobomb

3) Enregistrez le fichier:

:wq
161
Mohammad Anini

Une autre méthode pour supprimer ces caractères - en utilisant Vim :

vim -b nom_fichier

Maintenant, ces caractères "cachés" sont visibles (<feff>) et peuvent être supprimés.

25
ROMANIA_engineer

Merci pour les réponses précédentes, voici une variante sed (1) au cas où:

sed '1s/^\xEF\xBB\xBF//'
16
Michael Shigorin

Sous Unix/Linux:

sed 's/\xEF\xBB\xBF//' < inputfile > outputfile

Sur MacOSX

sed $'s/\xEF\xBB\xBF//' < inputfile > outputfile

Notez le $ after sed pour mac.

Sous Windows

Il existe Super Sed une version améliorée de sed. Pour Windows, il s'agit d'un fichier .exe autonome, destiné à être exécuté à partir de la ligne de commande.

15
Masum

Utiliser tail pourrait être plus facile: 

tail --bytes=+4 filename > new_filename
5
Dzanvu

La solution de @ tripleee n'a pas fonctionné pour moi. Mais changer le codage du fichier en ASCII et encore en UTF-8 a fait l'affaire:

3
Pablo Torrecilla

J'ai utilisé vimgrep pour cela 

:vim "[\uFEFF]" *

aussi commande de recherche vim normale

/[\uFEFF]
2
Olexiy Zamkoviy

Dans Windows, vous pouvez utiliser l’utilitaire backported recode de UnxUtils .

1
Nikita Koksharov

Dans Sublime Text vous pouvez installer le paquet Surligneur puis personnaliser l'expression régulière dans vos paramètres utilisateur.

Ici, j'ai ajouté \uFEFF à la fin de la propriété 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
}

Pour écraser les paramètres du paquetage par défaut, placez le fichier ici:

~/.config/sublime-text-3/Packages/User/highlighter.sublime-settings

1
JJD

La commande 'fichier' indique si la nomenclature est présente:

Par exemple: 'fichier monfichier.xml' affiche: "Document XML 1.0, texte Unicode UTF-8 (avec nomenclature), lignes très longues, terminaisons de lignes CRLF"

dos2unix supprimera la nomenclature.

1
LittletonDoug

Enregistrez le fichier sans signature de code.

0
Masood Moshref

Je suggère l'utilisation de l'outil "dos2unix", veuillez tester pour exécuter dos2unix ./thefile.js.

Si nécessaire, essayez d'utiliser quelque chose comme ceci pour plusieurs fichiers:

for x in $(find . -type f -exec echo {} +); do dos2unix $x ; done

Mes salutations.

0
Wellington1993