IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Encodage des scripts .m


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Encodage des scripts .m
    Bonjour à vous,
    aujourd'hui je tente de résoudre un problème qui me colle au train depuis 2 ans.

    J'écris mes scripts, parfois sous linux avec un simple éditeur de texte, parfois sous mac avec l'éditeur intégré de Matlab. L'encodage par défaut de linux est l'UTF-8, celui de Matlab: ISO-8859-1. J'ai donc des soucis d'accents quand je promène mes scripts d'un OS à l'autre.

    J'ai essayé de changer l'encodage de Matlab avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    slCharacterEncoding(UTF-8)
    Visiblement il ne reconnait que quelques formats et pas l'UTF-8.
    J'ai entendu dire qu'on pouvait préciser l'encodage des scripts dans l'en-tête avec les commentaires, un peu comme les scripts bash. Qu'est ce que ça donne? Et comment s'en sortir avec ces encodages?

    Bien sûr, j'aimerais éviter d'utiliser un autre éditeur sous mac et il est hors de question de changer l'encodage de linux (tout mes documents sont en UTF-8). Qu'en dites vous?

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Il manque les quotes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    slCharacterEncoding('UTF-8')
    Mais bon pas sure que ce soit vraiment le problème.
    Cette commande est utilisée a priori pour les modèles Simulink (elle est d'ailleurs disponible dans Simulink)
    Peux-tu nous préciser tes versions de MATLAB sur chaque OS ?
    Et comment "promènes"-tu tes scripts d'un OS à l'autre ?

    A une époque lointaine où je travaillais à la fois sur station SUN et sur Windows avec mon MATLAB antédiluvien (pas d'éditeur sur SUN), je passais par un utilitaire DOS2UNIX et inversement à chaque fois que je transférais mes fichiers d'une machine sur l'autre (c'était comme on peut l'imaginer super fun...)

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    J'ai cru à un miracle!! Mais j'ai fais quelques tests.. en fait non, ça marche pas. Alors:
    Currently, MATLAB supports: 'US-ASCII', 'Shift_JIS', 'ISO-8859-1',
    'IBM-5348_P100-1997', 'cp1252'.
    Pourtant après avoir testé ta commande Caro:
    >> slCharacterEncoding

    ans =

    UTF-8
    Et là j'ai commencé à écrire ma réponse ravi en faisant malgrè tout quelques tests. Finalement, fausse joie:

    Pour info:
    sous mac OS X: Matlab 7.4.0.287 (R2007a)
    sous linux debian: octave 2.1 (mais ça on s'en fout), gedit encodage UTF-8 (éditeur par défaut de debian sous lequel j'écris mes script et tout mes docs sous linux).

    Je suis pour l'instant sous mac.
    - J'ai crée un .m avec matlab puis je l'ai ouvert avec textedit (editeur de texte par défaut du mac) en encodage UTF-8 -> les accents sont replacés par des signes bizarres. Par contre quand je l'ouvre avec l'encodage 'occidental mac os', qui m'a l'air équivalent à 'ISO-8859-1', ca marche. J'en conclue que matlab continue d'encoder en ISO-8859-1'.
    - J'ai crée un fichier en UTF-8 sous textedit, puis j'ai essayé de l'ouvrir avec matlab, même soucis avec les accents. Matlab ne lit pas correctement les UTF-8.

    Tout ça malgrè le fait que lui me dise le contraire.

    Du coup Matlab ment .

    Généralement, j'écris mes documents sous linux (rapports et scripts) et je les promène avec une clé usb pour avoir avec moi les dernières versions de mes docs. J'ai configuré l'éditeur latex du mac pour l'UTF-8 et je voulais faire pareil avec matlab. C'est juste un soucis d'accents, dans les commentaires et les chaines de caractères, qui m'oblige à faire gaffe. Rien de bien méchant.

    Mais merci pour ton aide Caro. Et désolé pour cette réponse tardive.

  4. #4
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Sinon, solution à 2 sous :
    Ne pas mettre d'accent
    Dans les commentaires ça ne coute rien.
    Et pour les chaines de caractères, plus sioux : concaténer avec la valeur ascii : ça rend la lisibilité peu lisible mais du coup tu n'auras plus d'accents dans tes fichiers m
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str=['pens',char(233),'e']
    Joli, non ? (note : on peut se passer du char et mettre directement 233)

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Excellent!
    Et maintenant: comment faire pour mettre des accents dans les commentaires?

    Non, bon, ça suffit, je vais me contenter de cette encodage matlab/ISO et puis je m'arrangerais avec mon éditeur sous linux. Enregistrer en ISO de temps en temps, ça va pas me tuer.

    A plus et merci.

    PS: Je garde sous le main cette idée de code ASCII.

  6. #6
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    A tester, changer la variable d'environnement LANG avant de lancer MATLAB:
    setenv LANG us_en.UTF-8

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 552
    Points : 1 058
    Points
    1 058
    Par défaut
    Pour convertir des scripts déjà écrit d'un encodage à un autre, il faut utiliser iconv. Cet utilitaire devrait être installé avec ta distribution linux.

  8. #8
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    Citation Envoyé par vinc-mai Voir le message
    Pour convertir des scripts déjà écrit d'un encodage à un autre, il faut utiliser iconv. Cet utilitaire devrait être installé avec ta distribution linux.
    exact ou faire la même chose avec un M-file:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    fpIn = fopen('InputFileName', 'r', 'n', 'UTF-8');
    fpOut = fopen('OutFileName', 'w');
     
    while feof(fpIn) == 0
     lineIn = fgets(fpIn);
     fwrite(fpOut, lineIn, 'char');
    end
     
    fclose(fpIn);
    fclose(fpOut);
    Le code ci dessus convertit l'encodage des caractère UTF-8 à celui de l'encodage par défaut de l'utilisateur

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Salut et merci à tout les 2 pour vos réponses.
    Bilan:

    @Tug: J'ai essayé de mettre setenv LANG us_en.UTF-8 dans le startup.m. Après démarrage getenv me renvoie bien us_en.UTF-8 mais dès que j'essaie de créer un script, il me l'enregistre en ISO. J'ai l'impression que ça revient au même qu'utiliser slCharacterEncoding('UTF-8'). Quand tu dis "avant de lancer MATLAB", j'ai compris que tu parlais du startup.m c'est bien ça? Changer les variables d'environnement une fois MATLAB lancé à le même effet non?

    @vinc-mai: iconv est sûrement installé sur debian (il l'est d'ailleurs sur le mac), ça à l'air sympa comme utilitaire. Mais j'ai à peine 2 ou 3 scripts, à la limite je peux choisir l'encodage au moment de sauvegarder sous linux directement avec l'éditeur de texte.

    J'ai pris l'habitude des éditeurs de texte “modulables”, j'aurais bien aimé plier celui de matlab à ma volonté.

    A plus.

  10. #10
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    Citation Envoyé par silver.sax Voir le message
    Salut et merci à tout les 2 pour vos réponses.
    Bilan:

    @Tug: J'ai essayé de mettre setenv LANG us_en.UTF-8 dans le startup.m. Après démarrage getenv me renvoie bien us_en.UTF-8 mais dès que j'essaie de créer un script, il me l'enregistre en ISO. J'ai l'impression que ça revient au même qu'utiliser slCharacterEncoding('UTF-8'). Quand tu dis "avant de lancer MATLAB", j'ai compris que tu parlais du startup.m c'est bien ça? Changer les variables d'environnement une fois MATLAB lancé à le même effet non?
    non je ne pensais pas au startup.m mais plutot de taper cette commande dans le terminal linux où tu lances MATLAB ou alors de mettre cette commande dans ~/.cshrc

  11. #11
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    @Tug
    C'est à dire?
    Sous Linux j'utilise octave et sous Mac j'utilise MATLAB+X11, pas de shell donc mais une interface.
    J'ai quand même essayé de me placer dans le répertoire des binaires de Matlab (sous Mac donc) puis de lancer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./matlab setenv LANG us_en.UTF-8
    Matlab se lance en console (je ne connais pas l'argument à donner pour appeler X11) et l'encodage reste en ISO.
    hhhuuuuummmmm

    Tug, tu ne connaitrais pas une lige magique à rentrer dans les scripts pour que ces derniers soient interprétés en UTF-8? L'éditeur continuerait d'afficher des caractères étranges mais les chaînes de caractères dans le prompt seraient correctement affichées par contre.

  12. #12
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 552
    Points : 1 058
    Points
    1 058
    Par défaut
    permet de lancer l'interface graphique. Je pense qu'il faudrait fixer LANG avant d'utiliser matlab.

Discussions similaires

  1. encodage de base des scripts python
    Par airod dans le forum Zope
    Réponses: 1
    Dernier message: 26/04/2011, 15h48
  2. Des scripts très communiquant
    Par shinux2004 dans le forum Langage
    Réponses: 2
    Dernier message: 19/07/2005, 18h05
  3. [Eclipse 2.1] Encodage des fichiers pour un projet
    Par _-Sky-_ dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 26/05/2005, 22h26
  4. Réponses: 1
    Dernier message: 23/02/2005, 11h23
  5. [XML] encodage des accents
    Par matonfire dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 05/05/2004, 15h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo