begin process at 2008 08 08 21:48:14
1 223 607 membres
365 nouveaux aujourd'hui
14 230 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SUPPRIMER LES TAG BOM DANS FICHIER UTF-8


Information sur la source

Catégorie :Fichiers / Disque Source .NET ( DotNet ) Classé sous : utf8, bom, fichier Niveau : Débutant Date de création : 23/04/2008 Date de mise à jour : 24/04/2008 21:47:51 Vu / téléchargé: 2 778 / 36

Note :
Aucune note

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

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

  • /*
  • * 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();
  • }
  • }
  • }
/*
 * 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.
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

24 avril 2008 13:35:18 :
Il y a maintenant une classe à part.
24 avril 2008 21:47:51 :
Je fourni l'url ou les personnes pourront récupéré le programme déjà compilé, ligne de commande et window.
  • signaler à un administrateur
    Commentaire de sebmafate le 23/04/2008 13:47:23 administrateur CS

    1- Pourquoi avoir tout mis  dans le program.cs ?
    2- "Je fournis également le code source, plus secure quand on est un peu 'parano' :)" : en même codes-sources est une communauté de partage de sources... donc, pas de codes... pas de fiche ici.
    3- Les exe sont supprimés des fichiers zip.

  • signaler à un administrateur
    Commentaire de gluk le 23/04/2008 14:40:17

    1 - et pourquoi pas !
    2 - euhh, sinon t'as l'air débordé toi :) pense a faire des étirements, pour éviter les claquages !
    3 - merci pour l'info

    Sinon j'utilise ce code pour mes projets web, çà supprime tous les caractères pourris en début de fichier.
    Je pourrai améliorer le programme en y incluant les extensions à traiter (php,asp,html,html,...), ou même faire une application en fenêtre (mais la je suis pas sûre que ça fonctionne sous linux).

  • signaler à un administrateur
    Commentaire de sebmafate le 24/04/2008 12:14:19 administrateur CS

    Merci de mettre à jour la source pourqu'elle devienne réutilisable.

  • signaler à un administrateur
    Commentaire de gluk le 24/04/2008 13:36:50

    Cool, merci :)
    La classe est maintenant dans un fichier à part.
    J'ai rajouté la possibilité de mettre des extensions pour le scan.

  • signaler à un administrateur
    Commentaire de tmcuh le 25/04/2008 10:59:47

    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

  • signaler à un administrateur
    Commentaire de gluk le 25/04/2008 12:14:14

    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.

  • signaler à un administrateur
    Commentaire de coq le 26/04/2008 18:02:17 administrateur CS

    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.

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS