Supprimer les tag bom dans fichier utf-8

Soyez le premier à donner votre avis sur cette source.

Vue 13 878 fois - Téléchargée 704 fois

Description

Ce programme vous permettra du supprimer les tags au début des fichiers UTF-8 BOM.
J?ai rajouté la possibilité de mettre des extensions pour le scan.

Voici l'url pour les fainéants, le programme y est déjà compilé :
http://hidalgoemmanuel.info/csharp-net/supprimer-les-tag-bom-dans-fichier-utf-8.html

Source / Exemple :


/*

  • Created by SharpDevelop.
  • User: hidalgo emmanuel
  • Date: 24/04/2008
  • Time: 12:20
  • To change this template use Tools | Options | Coding | Edit Standard Headers.
  • /
using System; using System.IO; using System.Collections; namespace delete_tag_utf8_bom_win { /// <summary> /// Description of ScanUtf8Bom. /// </summary> public class ScanUtf8Bom { public string sLogFichiers = ""; private string[] _oExtension; public ScanUtf8Bom( string[] oExtensions ){ this._oExtension = oExtensions; } public void ScanFolder( DirectoryInfo oDirectory ){ foreach( FileInfo oFileInfo in oDirectory.GetFiles() ){ string sExtension = oFileInfo.Extension; if( sExtension.Length > 1 && sExtension.Substring( 0, 1 ) == "." ) sExtension = sExtension.Substring( 1 ); string sOkExtension = Array.Find( this._oExtension, delegate ( string sExt ) { return sExt == sExtension; } ); if( sOkExtension != null && this.FileIsBOM( oFileInfo.FullName ) ) this.DeleteTagBom( oFileInfo.FullName ); } foreach( DirectoryInfo oDirectoryChild in oDirectory.GetDirectories() ) if( oDirectoryChild.Name != ".svn" ) this.ScanFolder( oDirectoryChild ); } public bool FileIsBOM( string sFile ){ byte[] oData = new Byte[ 3 ]; byte[] oBom = new Byte[ 3 ]; oBom[ 0 ] = 239;// -> i oBom[ 1 ] = 187;// -> » oBom[ 2 ] = 191;// -> ¿ FileStream oFileStream = new FileStream( sFile, FileMode.Open ); oFileStream.Read( oData, 0, 3 ); for( int i = 0; i < oData.Length; i++ ) if( oData[ i ] != oBom[ i ] ) return false; oFileStream.Close(); return true; } public void DeleteTagBom( string sFile ){ this.sLogFichiers += "delete tag in : " + sFile + "\r\n"; FileInfo oFileInfo = new FileInfo( sFile ); byte[] oData = new byte[ oFileInfo.Length ]; FileStream oFileStream = new FileStream( sFile, FileMode.Open ); oFileStream.Read( oData, 0, (int)oFileInfo.Length ); oFileStream.Close(); File.Delete( sFile ); oFileStream = new FileStream( sFile, FileMode.Create ); oFileStream.Write( oData, 3, oData.Length - 3 ); oFileStream.Close(); } } }

Conclusion :


Ce programme vous permet de supprimer les tags BOM (souvent invisible) de l'ensemble des fichiers d'un répertoire.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
82
BOM = Byte Order Mark
Il est constitué du caractère U+FEFF écrit en début de fichier permettant de déterminer l'endianess

Ainsi on a :
UTF-16 Little Endian : FF FE
UTF-16 Big Endian : FE FF
UTF-32 Little Endian : FF FE 00 00
UTF-32 Big Endian : 00 00 FE FF

Pour UTF-8 c'est EF BB BF, il indique juste qu'on a affaire à de l'UTF-8 et ne donne pas réellement l'ordre comme UTF-8 n'est pas sensible à ce problème d'endianess.

On peut se permettre de l'enlever en UTF-8 sans trop de danger (c'est relatif) par contre sur de l'UTF-16 ou UTF-32 ça serait relativement dangereux, d'ailleurs je me demande même s'il n'est pas carrément obligatoire.
Par contre ça serait peut être mieux de faire en sorte qu'il soit géré à l'autre bout plutôt que de sacrifier les fichiers et s'exposer à des problèmes assez vicieux par la suite, notamment lors de l'édition par une personne tierce.
Messages postés
43
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
25 avril 2008

C'est vrai, mais je n’ai pas testé avec un UTF-32--> pas eu besoin de me mettre là dedans.
C'est surtout un outil pour le développement WEB, ça aide à la supprimer les erreurs de hearder en PHP.
Dans le listing des fichiers nettoyés on retrouve aussi des CSS et JS, ça prouve que les éditeurs inclussent les tags BOM en début de fichier.
Y a toujours moyen de paramétrer l'ide avec lequel ou développe pour désactiver le BOM.
Mais quand on récupère un projet, avec des tags BOM sur tout les fichiers, il faut se les taper à la main ...(crampe à la main)

Voila, ça sert juste à automatiser le processus.
Messages postés
463
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
18 avril 2009

Les tag BOM tu aurais dis MMYZ c'était le même ^^ ... quand on ne connait pas la finalité d'un code source avant de le télécharger, ça nous donne pas envie de le "découvrir", d'autant que L'utf-8 est une normalisation d'encodage, donc je vois pas ce que le terme vient faire là... Si on passe en UTF-32 ça marche toujours?

... s'en va sceptique
Messages postés
43
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
25 avril 2008

Cool, merci :)
La classe est maintenant dans un fichier à part.
J’ai rajouté la possibilité de mettre des extensions pour le scan.
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
Merci de mettre à jour la source pourqu'elle devienne réutilisable.
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.