Xcode (ou Smultron) et les BOM, ou comment les supprimer... ?

Hey bonjour la galerie,

Il y avait longtemps que je n'étais pas revenu ;), après mon application SokoBoihn qui était un genre de jeu de Sokoban, j'ai continué dans mes programmation, mais celle pour laquelle je suis le mieux alaise, c'est la programmation WEB (PHP/SQL, HTML/CSS, JAVA).

J'aurais aimé savoir quelques choses, comment on enlève, ou enregistre ses fichiers .php, sans les BOM, en utf-8 sans bom, car sur notepad++ avant quand je programmer sous Windows il y avait l'option mais sous Xcode ou sous Smultron, je trouve pas de manière.

Si quelqu'un pourrait m'aider, pour les enlevés, car les problèmes de header avec les cookies, c'est un peut chiant :s.

Merci d'avance pour votre aide.

Amicalement,
Kévin BEAUCORAL.

Réponses

  • CéroceCéroce Membre, Modérateur
    06:32 modifié #2
    Qu'est-ce qu'un BOM ?
  • Paisible.frPaisible.fr Membre
    06:32 modifié #3
    Je pense que Kevin parle du : "Business Object Model"

    Plus de details ici (en anglais) :
    http://www.codefluent.com/documentation/BusinessObjectModelOverview.html
  • AliGatorAliGator Membre, Modérateur
    06:32 modifié #4
    Lol heu les gars on voit que vous n'avez jamais eu à  manipuler des fichiers UTF-8 à  tort et à  travers :P
    (Qu'est ce que le Business Object Model aurait à  voir avec UTF-8, d'ailleurs ?)

    "BOM" signifie "Byte-Order-Mark", et il s'agit d'un préfixe optionnel de deux octets, qui peut être placé au tout début d'un fichier UTF-8, pour indiquer s'il s'agit d'un fichier UTF-8 LE (LittleEndian) ou UTF8-8 BE (BigEndian), et donc savoir ensuite dans quel sens lire les couples d'octets.
    Sauf que ce BOM pose bien souvent plus de problème qu'il ne rend de service, car peu de logiciels sont capables de le décoder, et en particulier les navigateur web se contentent bin souvent d'afficher ces deux octets du BOM au lieu de les interpréter comme il faut.

    Je n'utilise pas Smultron pour ma part donc je ne peux pas trop te répondre, mais dans TextWrangler (l'éditeur de texte dont je suis habitué), quand tu fais "Enregistrer sous...", tu peux choisir l'encodage de texte avec lequel tu enregistres ton document. Parmi ces choix tu as entre autres "UTF-8" et "UTF-8 (No BOM)" justement, donc il suffit de choisir le bon. Je ne sais pas si Smultron est pareil.
  • 06:32 modifié #5
    Bon pour gnome06 et Céroce, merci de votre aide, mais c'est vraie que vous êtes bien HS là  lol (Hors Sujet)

    Bon AliGator, je te remercie, mais en effet, comme toi et comme tu l'as dis moi aussi je suis habitué à  Xcode / Smultron et passé sur un autre, surtout par rapport au couleur de syntax etc, c'est pas agréable pour l'oeil un truc tout blanc.

    Enfin lorsque l'on est habitué à  un logiciel surtout pour coder c'est pas facile de changer.
    J'ai beau cherché sur internet, j'ai pas trouvé la réponse. Je penses que je vais essayé d'aller voir sur le site officiel de MAC et demandé à  un spécialiste de Xcode pour savoir s'il y a pas possibilité de supprimé ces BOM qui servent à  rien.

    Car franchement ça commence à  me lourder.

    Et sinon il n'y aurait pas des logiciels pour les supprimés ces BOM ?
  • AliGatorAliGator Membre, Modérateur
    06:32 modifié #6
    Tu peux toujours, par exemple via le terminal, supprimer les trois premiers octets de ton fichier* :
    tail -c +4 chemin/vers/ton/tonfichier.txt
    
    va te sortir sur la sortie standard le même contenu que tonfichier.txt, mais les 3 premiers octets en moins ("-c +4" = "commencer à  l'octet 4"). Tu peux alors demander à  écrire le résultat dans un autre fichier (un autre car lire dans un fichier et écrire dedans dans la même commande risque de vider complètement ton fichier en fait) pour récupérer le résultat :
    tail -c +4 fichierAvecBOM.txt >fichierSansBOM.txt
    
    Tu peux même rajouter ensuite le renommage de ton fichier SansBOM pour qu'il aille remplacer ton fichier AvecBOM une fois le remplacement fini : pour combiner le tout en une commande, ça donne :
    tail -c +4 fichierAvecBOM.txt >tempfile && mv tempfile fichierAvecBOM.txt
    
    Après, c'est un peu lourd à  faire à  chaque fois, je te le concède


    Sinon, il me semblais que quand Xcode manipulait des fichiers UTF-8, il ne rajoutais pas le BOM ?
    Un Pomme-I sur le fichier (une fois le fichier sélectionné dans la partie gauche "Groups & Files" dans ton Xcode) te permettra, dans l'onglet "Général", de choisir le "File Encoding". En général par défaut c'est UTF-8. Si tu choisis autre chose (ou même si tu re-sélectionnes l'encodage actuel) dans le menu déroulant correspondant, il te propose de convertir ou réinterpréter le fichier pour le passer à  cet encodage.

    J'ai essayé, en créant un nouveau fichier totalement vierge dans Xcode (New File -> de type "empty file"), en tapant du texte dedans, en sauvant : j'ai pas le BOM dans le fichier sauvé.


    *j'ai dit une bétise dans mon message précédent, le BOM fait 2 octets pour UTF-16, ce qui permet de préciser si c'est UTF-16 LE ou UTF-16 BE, mais en UTF-8 le BOM n'est non seulement pas obligatoire, et même pas recommandé, mais il fait 3 octets (0xEF 0xBB 0xBF).
  • 06:32 modifié #7
    Bon je verrais ça alors quand je serais chez moi.

    Par contre j'aimerais savoir comment tu as fais pour voir si oui ou non tu avais les BOM, car moi je l'ai vois pas dans mes lignes de codes quand j'ouvre le fichier sur Xcode ou Smultron...
  • AliGatorAliGator Membre, Modérateur
    06:32 modifié #8
    Bah comme j'étais dans le terminal, j'ai utilisé "hexdump" (ou "od") pour regarder le début de mon fichier. Un truc genre ça pour voir les 10 premiers octets du fichier et voir s'il contient le BOM :
    hexdump -n 10 fichier.txt
    
    qui permet de voir la représentation hexa du début du fichier, et donc de visualiser ce "ef bb bf" s'il est présent.

    Maintenant, dans la plupart des éditeurs de texte, tu peux aussi voir la représentation hexa du fichier (donc sans passer par le terminal si t'es pas fan). Ou sinon il y a des outils spécialisés, comme HexFriend.
  • tabliertablier Membre
    mars 2010 modifié #9
    Pour ces problèmes de BOM, j'utilise HexEdit pour voir le contenu réel , octet par octet (sur mon G4). Sinon, TextWrangler permet de sauver suivant les modes:
    Unicodeâ„¢ (UTF-8)
    Unicodeâ„¢ (UTF-8, no BOM)
    Unicodeâ„¢ (UTF-16)
    Unicodeâ„¢ (UTF-16, no BOM)
    Unicodeâ„¢ (UTF-16, Little-Endian)
    Unicodeâ„¢ (UTF-16, Little-Endian, no BOM)
    En cherchant un peu, il doit y avoir d'autres programmes qui font ça. 'Hex Fiend' pour l'héxa (Ali -> pas HexFriend) et  pour l'édition: ChocoFlop ?  BBEdit ? Editra ? TextMate ? ........ A vo't bon coe“ur m'sieurs dames.
  • mars 2010 modifié #10
    Merci à  tous de vos réponses merci vraiment ;)

    En fin de compte, c'est apparemment lorsque l'on fait un copier coller d'un fichier vers un autre qu'il met une signature BOM tout seul.
    Car lorsque je crée mes sites internet généralement c'est le même squelette HTML, donc je copie et je colle dans d'un fichier "SQUELETTE" à  chaque fois que je recrée une page, et en fait dès que j'ajoute des COOKIE, ça me met un problème de header dans ma page à  la ligne des COOKIE et ça c'est à  cause des petit octes de BOM, de cette signature de merde.

    Car en effet en recréant des fichiers sans copier coller en mettant juste un pti script php qui faisait des cookies l'erreur ne se montre pas, que ce soit en créant sous Xcode ou Smultron.

    Merci à  vous de votre aide néanmoins pour retrouver ces petites signature qui se cache contrairement à  ce que vous disiez elle ne sont pas toujours au début du fichier ni tout à  la fin, mais des fois caché dans de simple balise. ;)
  • AliGatorAliGator Membre, Modérateur
    06:32 modifié #11
    En effet si tu fais un copier/coller, et que le "copier" copie le fameux BOM, et que tu "colles" ensuite le résultat en plein milieu d'un autre fichier... tu auras ton BOM en plein milieu.
    Et ça ce n'est pas vraiment la faute de l'éditeur de texte (à  part pour le fait qu'il copie le BOM dans le presse-papier lors du "copier", mais en même temps, c'est ce qu'on lui demande, de tout copier même les caractères non-imprimables...), car c'est pas l'enregistrement de ton fichier en UTF-8 qui rajoute le BOM au moment de la sauvegarde, ici ces BOM sont "juste" des caractères non-imprimables que tu copies/colles et qui viennent donc "polluer" ton fichier.

    Dans certains éditeurs de texte (comme TextWrangler, je sais pas pour Smultron), tu as des options pour supprimer ces caractères non-imprimables puisque justement par définition ces caractères n'apparaissent pas... et foutent souvent la zone :P
    Donc tu as en général des options genre "Zap Gremlins" (oui, ces caractères non imprimables certains les appellent des "gremlins" :P) qui proposent soit de supprimer ces caractères gênants, soit de les remplacer par autre chose (un "?" ou un "¿" ou un "•" par exemple) pour les rendre visibles.
    A défaut, tu as aussi parfois dans certains éditeurs de texte la possibilité de montrer les caractères invisibles ("Show Invisibles"), ce qui permet de mettre en avant visuellement les tabulations et les espaces (pour les différencier facilement) ou justement les caractères imprimables comme le BOM.
  • 06:32 modifié #12
    Merci Merci AliGator, c'est toujours un plaisir de te voir autant investi dans le site pommedev.com, et de toujours recevoir une aussi bonne aide ;).

    A une prochaine :)
Connectez-vous ou Inscrivez-vous pour répondre.