Un header d’encoding plus simple pour Python 19


Je sais pas pour vous, mais moi je me souviens jamais de :

# -*- coding: utf-8 -*-

Je le copie/colle à chaque fois, et sur sublime j’ai un snippet pour le taper.

Je viens d’apprendre, après 10 putain d’années à coder en python, que le header suivant était parfaitement valide :

# coding: utf-8

Bordel de merde, pourquoi c’est pas écrit dans tous les tutos ? Pourquoi on se tape encore l’ancien ?

Évidement avec Python 3, y a souvent plus besoin d’en-tête du tout, mais shit, ce genre détail c’est super con. Vous imaginez pas le nombre d’élèves à qui j’ai fait apprendre la première version toute pourrie alors que la seconde est si simple.

Grr, dirais-je.

19 thoughts on “Un header d’encoding plus simple pour Python

  • gkar0

    Rhaaa…. je suis moi aussi sur le cul ! Je vais faire un gros gros sed sur tous mes dépots comme ça les prochains copier/coller seront plus joli !

    Merci pour l’info

  • JMarc

    Ah tiens, c’est vrai ça, ça énerve, maintenant que tu le dis… mais c’est vraiment cool d’avoir cet info ! Merci !

  • dbdhjherhhuhqdfuhidqsqsooq

    Bordel de merde, pourquoi c’est pas écrit dans tous les tutos ? Pourquoi on se tape encore l’ancien ?

    Tout simplement parce que ça présente l’intérêt d’avoir un header qui en plus d’être reconnu par Python, l’est aussi par divers éditeurs comme Emacs ? La syntaxe vient de là à la base.

  • Sam Post author

    C’est pas aux langage de s’adapter aux éditeurs, ce sont aux éditeurs de s’adapter aux langages.

    De plus, c’est le fait que personne ne parle des alternatives qui me fait chier. C’est juste idiot de faire un status quo de notation pour une minorité d’utilisateur d’un outil:

    http://www.google.com/trends/explore#q=%2Fm%2F01r_y0%2C%20%2Fm%2F07zlj%2C%20%2Fm%2F01yp0m%2C%20%2Fm%2F01fchg%2C%20%2Fm%2F01fs1d&cmpt=q&tz=

    Et encore emacs est long à configurer comparé à elipse ou visual studio, donc ça boost les recherches pour des tutos.

  • touque

    Eh oui, à la base c’est bien pour satisfaire ces sieurs les utilisateurs d’emacs. On trouve aussi plus rarement le # vim:fileencoding=utf-8 par les utilisateurs de vim. Mais effectivement c’est une belle connerie, qui heureusement tend à disparaitre.

  • matthieu

    rigolo, perso j’ai fait le chemin inverse (#coding:utf-8 vers # -- coding: utf-8 -- ).

    Mais faut dire que mon IDE (PyCharm pour ne pas le nommer) le fait pour moi, donc je n’ai pas trop de mérite.

  • Biganon

    Perso j’utilise :

    # Bonjour, je voudrais utiliser cet encoding: utf-8 ; et sinon, la famille ça va ?

    et ça marche très bien.

  • Bredt

    C’est marrant, mais je me lance dans la programmation sur python et je me suis justement posé la question y’a 2 jours. J’avais bien trouvé la version simple mais comme j’ai lu un article sur Sam & Max la version avec les -*- alors je m’y suis mis !

    Lol

  • mmu_man

    Parce que Emacs c’est le bien® ?

    En même temps, les éditeurs ont souvent une énorme heuristique pour détecter l’encodage…

    D’un autre côté s’ils étaient utilisés sur un OS pas pourri ils utiliseraient un attribut étendu pour s’en rappeler, comme on fait depuis 15 ans sous BeOS et Haiku… (et même sous GNU/Linux il y a un “user.charset” (très mal nommé) standardisé par FreeDesktop : http://www.freedesktop.org/wiki/CommonExtendedAttributes/#generalattributesincurrentuse mais bien sûr personne ne s’en sert)

  • Sam Post author

    Non, j’ai mis à jour l’article a posteriori :) C’est un des articles les plus lus du blog, je voulais pas que les nouveaux venus passent à côté.

  • bealdav

    Bonjour,

    Cette info est-elle confirmé ailleurs sur la toile ?

    Moi je vous crois volontiers (I’m lazy) mais c’est eux à côté de moi, ils veulent pas vous croire.

  • Sam Post author

    Ailleurs sur la toile ? Autant aller voir carrément la spec (https://www.python.org/dev/peps/pep-0263/).

    La regex de validation est “coding[:=]\s*([-\w.]+)”, or:

    <pre lang=”python>

    re.match(r’coding[:=]\s*([-\w.]+)’, ‘coding: utf-8′)

    <_sre.SRE_Match object; span=(0, 13), match=’coding: utf-8’>

    Le compte est bon.

    “#coding:utf8″ et “# coding= utf-8″ et “# fjdskqmfjsdqlmdkfsjkcoding: utf8 zarma” marcherait aussi, c’est juste que “# coding: utf-8″ est le truc le plus simple et le plus lisible à écrire.

  • MSPE

    Pour les gros minimalistes comme moi… # coding: u8 fonctionne aussi :P

  • haypo

    Pour les militants : “# cocoricoding: utf8, l’encoding bien français” avec un C cédille qui va bien. C’est cocasse d’accepter un caractère non-ASCII sur la ligne qui déclare l’encodage :-)

Leave a comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.