Forum Programmation.c encodage des sources

Posté par  .
Étiquettes : aucune
0
1
déc.
2004
Bonsoir,

Je viens de reprendre sous Linux le développement d'un jeu arrêté il y a ... ouh là là très longtemps, 2 ou 3 ans au moins :-) Ca fonctionnait sous DOS et Windows, c'est dire !

Je ne connaissait pas encore Linux, mais j'avais eu la bonne idée de mouliner tout ça avec gcc et allegro, ce qui fait qu'il n'y a pas grand chose à reprendre .. mis à part un truc : tous les caractères accentués sont transformés dans le source, testé avec kwrite et vim.

Comme je ne souhaite pas casser la portabilité du jeu, y a-t-il une astuce pour garder des accents lisisbles que ce soit (au moins) sous Windows ou Linux ? Je veux dire à la fois dans le source (commentaires) et dans les chaînes de caractères affichées.

Merci d'avance :-)
  • # moi je ferais ca :

    Posté par  (site web personnel) . Évalué à 5.

    Encode tous tes sources en UTF-8.
  • # Encodage caractère

    Posté par  . Évalué à 5.

    Bonsoir,

    Le programme n'aurait-il pas été développé sous DOS (plutôt que Windows) ?

    Dans ce cas, il y a de grandes chances que les caractères soient codés en CodePage 850 (autrement appelé OEM).
    Si la retro-compatibilité avec DOS ne te gène pas trop, tu devrait essayé de convertir tout ça en latin1 (ISO8859-1) quit doit parfaitement s'afficher aussi bien sous Unix/Linux que sous Windows.
    Pour la conversion, tu peux par exemple utiliser "iconv"
     iconv -f CP850 -t ISO8859-1 

    Un simple test sur un des fichiers source devrait te permettre de savoir si c'est bien ce que je te raconte.

    A+
    JJD
    • [^] # Re: Encodage caractère

      Posté par  . Évalué à 2.

      Le programme n'aurait-il pas été développé sous DOS (plutôt que Windows) ?

      En effet, j'ai commencé sous DOS, puis adapté pour qu'il se compile sous Windows également.

      iconv -f CP850 -t ISO8859-1

      Bingo ! Les accents sont revenus :-) J'essayerais de lire le fichier sous Windows demain pour voir si ça passe également. Bon, il y a encore quelques caractères qu'iconv n'aime pas mais je peux me passer de ceux-là.

      Effectivement, la compatibilité DOS, je m'en tamponne un peu maintenant : je ne crois pas que ce système soit toujours d'actualité pour une plate forme de jeu.

      Merci pour ton aide :-)
      • [^] # Re: Encodage caractère

        Posté par  . Évalué à 4.

        > Bingo ! Les accents sont revenus :-)

        Et passe en chinois, russe ou ce que tu veux, et pouf, plus d'accents...
        Le seul moyen de gérer ça convenablement c'est de passer en UTF-8 (ou tout autre encodage unicode), mais ça oblige à utiliser des éditeurs supportant l'UTF-8 par derrière.
        • [^] # Re: Encodage caractère

          Posté par  . Évalué à 3.

          Ben il vient te dire qu´il utilise Vim
          Tout baigne !
          • [^] # Re: Encodage caractère

            Posté par  . Évalué à 1.

            Vim c'est seulement les jours où je me sens vraiment motivé. En temps normal, j'utilise kwrite :-)

            Sinon, j'ai bien compris qu'il vaut mieux utiliser utf8. Il faudra vraiment que j'essaye une compil sous windows avec différents encodages. Qu'il faille télécharger un éditeur utf8 sous cet OS je m'en tamponne un peu (y a gvim au moins), mais il faut que gcc parvienne à lire le source sur toutes les plateformes :-)
            • [^] # Re: Encodage caractère

              Posté par  . Évalué à 1.

              C'est pas le compilateur (gcc, en l'occurence,) qui pose problème avec les encodages. À quelques exceptions près, on peut mettre ce qu'on veut dans les commentaires ou les chaînes de caractère C. Ce sera inséré tel que représenté par le fichier source dans le code objet créé à la compilation.

              Ce qui peut poser problème, c'est l'environnement dans lequel sera exécuté le programme : il s'attend à ce que le programme lui demande d'afficher ses textes en quel encodage ?
      • [^] # Re: Encodage caractère

        Posté par  . Évalué à 0.

        Méfiance, l'encodage Windows qui ressemble à de l'ISO pourrait bien être le Windows-1250. C'est le plus répandu à mon avis, notament dans le système de fichiers.

        Je crois cependant que la meilleure manière d'assurer la portabilité vers toutes les langues du monde, si c'est bien ton objectif, ou en tous cas leur majorité est encore de coder tes chaînes en Unicode sur 16 bits par caractère. Il me semble, mais c'est à vérifier, que les compilateurs de chez Bill font cela par défaut (un xxd sur les fichiers générés montrent des caractères codés sur deux octets).

        Par contre, si tu souhaites te cantonner, et c'est déjà beaucoup, aux langues latines, alors l'ISO-8859-15 avec son symbole euro est aujourd'hui l'encodage de référence pour tout le monde.
        • [^] # Re: Encodage caractère

          Posté par  . Évalué à 2.

          Euh... De l'utf-16 pour du code source de C ? Ce truc qui redéfinit même l'ASCII en lui mettant systématiquement un octet nul devant ? T'es vraiment sûr de ton coup ?

          Je suis même pas sûr qu'il existe une obscure option permettant à gcc de gérer ça...
          • [^] # Re: Encodage caractère

            Posté par  (site web personnel) . Évalué à 0.

            Il n'a pas parlé d'UTF-16. Il a parlé de 16 bits par caractères... Ce qui colle pile-poil avec l'UTF-8 justement !
            • [^] # Re: Encodage caractère

              Posté par  . Évalué à 2.

              On n'a pas la même conception de l'UTF-8 alors ;) L'UTF-8 c'est des caractères codés sur 1 à 6 octets, 1 octets pour l'US-ASCII, 2 octets pour les caractères accentués et tout ça, pour plus d'octets je sais pas trop.
              • [^] # Re: Encodage caractère

                Posté par  . Évalué à 1.

                T'auras plus d'octets pour les alphabets les moins répandus généralement...comme ça les langues les plus employées ne sont pas pénalisées en terme d'espace de stockage...
                pour plus d'informations :
                http://www.unicode.org(...)
                http://www.cl.cam.ac.uk/~mgk25/unicode.html(...)
                • [^] # Re: Encodage caractère

                  Posté par  . Évalué à 1.

                  Je doute qu'il existe des cas où ça soit intéressant, mais de toute façon quelles que soient les qualités de l'utf-16, ça ne convient pas pour des fichiers sources de C, voyons ! Et c'est bien de ça qu'on parle.

                  À la rigueur, ça a du sens en rangeant les textes du programme dans un fichier de ressources à part, mais voilà, quoi.
                  • [^] # Re: Encodage caractère

                    Posté par  . Évalué à 1.

                    J'ai pas compris pourquoi on m'a moinssé (euh, inutile-é) alors que je recentrais vers ce dont on parle et non pas vers l'intérêt de tel ou tel encodage dans le cas général. Enfin -_-°...
                    • [^] # Re: Encodage caractère

                      Posté par  . Évalué à 2.

                      J'ai pas compris ce que tu voulais recentrer, t'as dit que l'utf16 c'était pas adapté, qu'il fallait faire de l'utf8, qqu'un t'as répondu en disant que t'avais mal compris, que ce qui était suggéré c'était probablement de l'utf8, et ensuite y a deux posts qui expliquent à ce qqu'un qu'il se trompe quand il parle d'utf8, et toi tu redébarques en disant qu'on parle tous d'utf16 que c'est pas là le sujet.
                      Je t'ai moinsé parce que j'avais bien compris ce que tu disais la première fois, et que là ça avait pas grand chose àf aire dans la discussion ton commentaire.
                      Et je remoinse parce que tu chiales parce que tu t'es pris des - Ca te fait au moins une personne sur qui te défouler pour te venger...
                      • [^] # Re: Encodage caractère

                        Posté par  . Évalué à 0.

                        Je n'ai pas chialé, j'ai fait savoir que je considérais comme erroné le fait de considérer mon précédent message comme inutile (ouf). (Au passage, ce n'est pas le cas avec celui-là, moinssez tous !) Pourquoi ? Parce que c'était le cas. Et que je m'ennuie un peu. Aussi.
                        Tant qu'à faire, j'aime savoir pourquoi on est noté "inutile" quand ça me paraît pas évident, et là, il se trouve que je l'ai su.

                        Et je n'ai aucune intention de "me défouler." C'est pas si immature de demander, pas vrai ? De toute façon, tout cet arbre, à part sa racine, est inutile.
                        • [^] # Re: Encodage caractère

                          Posté par  . Évalué à 2.

                          > Et je n'ai aucune intention de "me défouler." C'est pas si immature de demander, pas vrai ?

                          Vu les spécimens divers et variés qui traînent sur linuxfr, vaut mieux renoncer à essayer de déceler un comportement cohérent au sein des plussages et moinsages anonymes.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.