Détection et suppression des BOM dans le codage UTF-8

Source : Internet
Auteur : utilisateur
Le nom complet de boM est OrderByteMark, un caractère Unicode qui apparaît habituellement au début du texte pour identifier la séquence octet (Big/LittleEndian), et en plus d'identifier l'encodage (UTF-8/16/32), s'il apparaît au milieu du texte, Elle est interprétée comme zéro largeur de largeur..." . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Le nom complet de boM est Byte Order Mark, un caractère Unicode qui apparaît habituellement au début du texte pour identifier la séquence octet (Big/Little Endian), et en plus d'identifier l'encodage (UTF-8/16/32), s'il apparaît au milieu du texte, ceci est interprété comme zéro largeur sans rupture d'espace. Remarque : Pour une description détaillée des connaissances d'Unicode, veuillez consulter UTF-8, UTF-16, UTF-32 et BOM. Pour UTF-8/16/32, 8/16/32 dans leur nom se réfère au nombre de bits sont des unités codées, c'est-à-dire, leurs unités de codage sont 8/16/32 bits, convertis en octets est 1/2/4 octets, si elle est multi-octet, il est impliqué dans l'ordre octet, UTF-8 est encodé en octets simples, il n'y a donc pas d'ordre d'octet. Le principal avantage de UTF-8 est qu'il est compatible avec ASCII, mais si vous utilisez le BOM, l'avantage a disparu, et en outre, l'existence de la BOM peut causer certains problèmes, tels que les erreurs suivantes peuvent être causées par le BOM:

  • Shell: Pas de fichier ou d'annuaire de ce type
  • PHP: Avertissement: Impossible de modifier les informations d'en-tête - en-têtes déjà envoyés

Avant de discuter en détail de la détection et de la suppression des BOM dans l'encodage UTF-8, vous voudrez peut-être vous réchauffer avec un exemple :

Shell -curl -s http://phone.10086.cn/ . . . tête -1 . . . sed -n l 357?273?277 

Comme indiqué ci-dessus, les trois premiers octets sont 357, 273, et 277, qui est l'octa-binaire BOM.

Shell -curl -s http://phone.10086.cn/ . . . tête -1 . . . hexdump -C0000000ef  bb bf 3c 21 44 4f 43  54 59 50 45 20 68 74 6d  . .  .

Comme indiqué ci-dessus, les trois premiers octets sont EF, BB, BF, qui est un BOM hexadecimal. Remarque : Avec la page d'un site Web tiers, il n'y a aucune garantie que l'exemple sera toujours disponible. Lorsque vous faites réellement le développement de projet, vous pouvez faire face à des centaines de fichiers texte, s'il ya plusieurs fichiers mélangés dans le BOM, alors il est difficile à détecter, s'il n'y a pas de fichier texte UTF-8 avec BOM, vous pouvez écrire quelques-uns, les commandes pertinentes sont les suivantes:

Configurer l'encodage UTF-8 :

: setencoding fichier de fichier sutf-8

Ajouter BOM:

:: bombe placée

Supprimer le BOM:

: définir nobomb

Requête BOM:

: bombe placée ?

Comment puis-je détecter le BOM dans le code UTF-8 ?

Shell grep -r -I -l'''xEF'xBB'//path

Comment puis-je supprimer le BOM dans le code UTF-8 ?

Shell grep -r -I -l'?'xEF'xBB'///path xargs sed -i 's'''''''''xEF'xBB///;q'

Recommandation : Si vous utilisez SVN, vous pouvez ajouter le code pertinent dans le crochet pré-commit pour éliminer le BOM.

s!/bin/bashREPOS""1" TXN""2" SVNLOOK?/usr/bin/svnlookfor FILE in ($SVNLOOK-changed -t "$TXN" "$REPOS" int $NF') faire    si $SVNLOOK chat -t "$TXN" "$REPOS" "$FILE" sgrep -q $'xEF'xBB';xBF';        FILE" 1 -2        sortie 1    fidone

Cet article utilise beaucoup de commandes shell, espace limité, sans élaborer, s'il n'est pas de comprendre le s'il vous plaît la recherche pour elle.

PS: Quelques autres lignes de commande:

1er awk's 'if'?if'?1)sub (/?xef?xbb?xbf/,");p")"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
2 (en)
3e queue --octets s.4 text.txt
4 ( en plus)
5e tail -c - 4 UTF8 et UTF8.nobom

Deux autres cas d'exceptions de codage boM python utf-8 ont été partagés :

http://hi.baidu.com/leejun_2005/item/bf28ded296cb8ebf33db9096

http://hi.baidu.com/leejun_2005/item/8c8855757225835b0d0a0780

Nous contacter

Le contenu de cette page provient d'Internet et ne reflète pas l'opinion d'Alibaba Cloud ; les produits et services mentionnés sur cette page n'ont aucune relation avec Alibaba Cloud. Si le contenu de la page vous semble problématique, veuillez nous écrire un courriel, nous traiterons le problème dans les 5 jours suivant la réception de votre message.

Si vous constatez des cas de plagiat de la part de la communauté, veuillez envoyer un courriel à : info-contact@alibabacloud.com et fournir des preuves pertinentes. Un membre de notre équipe vous contactera dans les 5 jours ouvrables.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.