web-dev-qa-db-fra.com

Comment supprimer la nomenclature d'un fichier UTF-8?

J'ai un fichier en encodage UTF-8 avec BOM et je souhaite supprimer la BOM. Existe-t-il des outils de ligne de commande Linux pour supprimer la nomenclature du fichier?

$ file test.xml
test.xml:  XML 1.0 document, UTF-8 Unicode (with BOM) text, with very long lines
16
m13r

Une nomenclature est un point de code Unicode U + FEFF; le codage UTF-8 se compose des trois valeurs hexadécimales 0xEF, 0xBB, 0xBF.

Avec bash, vous pouvez créer une nomenclature UTF-8 avec le formulaire de devis spécial $'', Qui implémente les échappements Unicode: $'\uFEFF'. Ainsi, avec bash, un moyen fiable de supprimer une nomenclature UTF-8 au début d'un fichier texte serait:

sed -i $'1s/^\uFEFF//' file.txt

Cela laissera le fichier inchangé s'il ne démarre pas avec une nomenclature UTF-8 et supprimera sinon la nomenclature.

Si vous utilisez un autre shell, vous constaterez peut-être que "$(printf '\ufeff')" produit le caractère de nomenclature (qui fonctionne avec zsh ainsi que tout shell sans printf intégré, à condition que /usr/bin/printf Est la version Gnu), mais si vous voulez une version compatible Posix vous pouvez utiliser:

sed "$(printf '1s/^\357\273\277//)" file.txt

(L'indicateur de modification sur place -i Est également une extension Gnu; cette version écrit le fichier éventuellement modifié sur stdout.)

21
rici

Utilisation de VIM

  1. Ouvrir un fichier dans VIM:

    vi text.xml
    
  2. Supprimer l'encodage de nomenclature:

    :set nobomb
    
  3. Sauvegarder et quitter:

    :wq
    
15
Joshua Pinter

Il est possible de supprimer la nomenclature d'un fichier avec la commande tail:

tail --bytes=+4 withBOM.txt > withoutBOM.txt
4
m13r

Eh bien, je viens de traiter cela aujourd'hui et ma façon préférée était dos2unix:

dos2unix supprimera la nomenclature et prendra également en charge les autres particularités des autres SO:

$ Sudo apt install dos2unix
$ dos2unix test.xml

Il est également possible de supprimer la nomenclature uniquement (-r, --remove-bom):

$ dos2unix -r test.xml

Remarque: testé avec dos2unix 7.3.4

3
Reginaldo Santos