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

Langage Java Discussion :

[Portabilité maximale] caractères spéciaux


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 136
    Par défaut [Portabilité maximale] caractères spéciaux
    Salut à tous,

    Mon but est de faire un code parfaitement portable (Windows, Mac et Linux). Donc lorsque j'écris un fichier, je dois éviter de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    outputStream.print("Ligne de test\n");
    mais plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    outputStream.println("Ligne de test");
    car le caractère \n n'est pas universel

    Bon bon... mais il y a d'autres caractères dans le genre, et moi j'utilise beaucoup la tabulation: \t. Est ce que celui là est universel ? Si ce n'est pas le cas, quelle commande utiliser à la place ?

    Merci d'avance

    PS: Je ne dois pas être le seul à me poser la question, j'ai regardé dans la FAQ et je n'ai pas trouvé...

    Sierra

  2. #2
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    Il faudrait savoir ce que tu appelles universel. \n est universel, que je sache ; son résultat n'est peut être pas universel. Je ne sais pas ce que tu cherches comme résultat. C'est pareil avec \t.

    Probablement, tu cherches à écrire dans des fichiers, et je présume que tu voudrais obtenir un saut de ligne pour \n, une tabulation pour \t. Malheureusement, que tu écrives \n ou println, le résultat sera tout aussi inefficace du point de vue de l'universalité : au final, c'est le système d'exploitation qui commande, voir l'éditeur qui visualisera ton fichier.

    Si tu écris un fichier sur mac avec le retour chariot du mac, puis que tu déplaces ce fichier vers un poste windows, tu risques de ne pas obtenir ce que tu espères.

    A ma connaissance, au niveau de l'adaptation pour chaque système, le retour chariot est le seul effet à essayer de s'adapter.

    Donc, pourrais-tu mieux nous définir ta notion de l'universalité ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 136
    Par défaut
    Ok, c'est vrai que mon message n'est pas parfaitement clair.

    Je cherche effectivement à obtenir des sauts de ligne et des tabulations dans un fichier. Il semble que chaque système ait un caractère de saut de ligne "par défaut", qui n'est pas forcément \n. Ce caractère de saut de ligne par défaut peut être obtenu en Java avec la méthode newLine() de BufferedWriter.

    Doc Java:
    public void newLine()
    Write a line separator. The line separator string is defined by the system property line.separator, and is not necessarily a single newline ('\n') character
    La question est donc plus précisément: existe-t-il plusieurs caractères de tabulation (selon l'OS utilisé) comme dans le cas des caractères de saut de ligne ? Si oui, existe-t-il dans Java une méthode telle que newLine() mais pour les tabulations ?

    Merci d'avance et A+

  4. #4
    Membre éclairé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Par défaut
    Je pense que si tu es sûr que l'Unicode est supporté de façon "universell" sur tes différentes plateformes de destination, un petit coup de \u0009 devrait faire l'affaire et toujours te donner le même résultat.
    Sinon, tu peux même te contenter d'ajouter le caractère ASCII 9 là où tu veux mettre ta tabulation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char tab = new char(9);
    Je pense que ça doit marcher. A essayer.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Par défaut
    Citation Envoyé par L. Sierra
    Ce caractère de saut de ligne par défaut peut être obtenu en Java avec la méthode newLine() de BufferedWriter.
    Y a quand même plus efficace que d'instancier un StringBuffer : System.getProperty("line.separator")

  6. #6
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    Excuse-moi L Sierra si ma réponse t'as un peu bousculé, ce n'était pas mon intention. L'universalité a ceci de particulier qu'elle n'existe pas, en tout cas pas en informatique, et qu'il faut toujours préciser un peu.

    Je pense que, si tu veux mettre dans un fichier des \n et des \t, alors il faut mettre des \n et des \t dans ton code java : ces caractères sont parfaitement définis dans la spécification du langage (3.10.6 Escape Sequences for Character and String Literals), et ils te donneront toujours ce que l'on attend qu'ils donnent : un 0a et un 09 hexa.

    Le problème vient si l'on commence à parler de l'effet de ces \n et ces \t. Tu les auras bien dans ton fichier, mais selon la façon dont tu les visualiseras, ils pourront avoir des effets différents.

    Il est courant qu'un éditeur, par exemple, remplace les \t par des espaces ; il est courant que un système d'exploitation présente les \n comme d'horribles caractères de contrôle, ou même qu'ils ne soient pas du tout montré. Là dessus tu ne gères plus rien.

    Ta seule alternative est d'essayer de deviner ce que ce sera ; et il n'y a que l'effet retour à la ligne que Java essaie de fournir.

Discussions similaires

  1. caractères spéciaux
    Par mat10000 dans le forum Flash
    Réponses: 16
    Dernier message: 23/10/2003, 13h22
  2. Où trouver la liste des caractères spéciaux?
    Par gamez dans le forum Langage
    Réponses: 3
    Dernier message: 19/08/2003, 17h54
  3. Transformation XSL et caractères spéciaux
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 4
    Dernier message: 28/04/2003, 10h38
  4. [Sybase] filtre sur caractères spéciaux
    Par montelieri dans le forum Sybase
    Réponses: 4
    Dernier message: 07/04/2003, 16h49
  5. Traiter les caractères spéciaux
    Par ricola dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2003, 09h23

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