Unicode
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Unicode



  1. #1
    Médiat

    Unicode


    ------

    Bonjour,
    N'ayant pas l'expérience de ce genre de problème je suis bloqué sur un truc très bête lié à Unicode :

    J'appelle une fonction avec comme paramètre une chaîne unicode: UtlPrint("\u2500\u2510 ");

    void UtlPrint(const char *sChaine)
    {
    printf("%s", sChaine);
    return;
    }

    Et tout se passe très bien, mais, bien sûr, ma fonction UtlPrint est censée faire autre chose qu'un simple print, et pour cela j'ai besoin de récupérer chacun des 3 (ici) caractères qui constitue la chaîne, comment faire ? (bien sûr, sChaine[0](etc.), ne fonctionne pas)

    Merci d'avance.

    -----
    Je suis Charlie.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse

  2. #2
    pm42

    Re : Unicode

    Tu utilises quoi comme compilateur et sur quelle plateforme ? Si j'affiche s[0], s[1], j'ai :

    ffffffe2
    ffffff94
    ffffff80
    ffffffe2
    ffffff94
    ffffff90
    20
    0

    Donc cela permet de décoder "à la main" ou avec une librairie.

  3. #3
    Médiat

    Re : Unicode

    Salut pm


    Merci pour ta réponse:

    J'utilise Visual Studio sous windows 10

    C'est quoi le carré dans s[0] ???
    Je suis Charlie.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse

  4. #4
    pm42

    Re : Unicode

    Citation Envoyé par Médiat Voir le message
    J'utilise Visual Studio sous windows 10
    C'est ce que je connais le moins mais je crois qu'il y a des librairies pour gérer ce genre de conversion.

    Citation Envoyé par Médiat Voir le message
    C'est quoi le carré dans s[0] ???
    s[0] n'est pas un carré, c'est comme s[1] et s[2] l'un des 3 octets nécessaires pour encoder ce caractère unicode. C'est 3 octets affichent un trait en haut, le haut du carré.
    s[3] à s[5] affichent le coin haut droit du carré.
    s[6] est l'espace codé lui sur 1 octet puisque c'est de l'ascii.

  5. A voir en vidéo sur Futura
  6. #5
    Médiat

    Re : Unicode

    Ok, merci beaucoup, je crois que je vais m'en sortir, le carré auquel je faisais allusion est celui qui apparaît chez moi dans ton message 2 mais pas dans le 4 et qui est en fait un caractère x1B

    Merci encore
    Je suis Charlie.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse

  7. #6
    Médiat

    Re : Unicode

    Un autre problème lié au précédent :

    Je voudrais aligner certains affichages :
    Code:
    printf("%-15s - %s\n", "Present", "present");    
    printf("%-15s - %s\n", "Présent", "present");
    wprintf(L"%-15s - %s\n", L"Présent", L"present");
    Code:
    Present         - present
    Présent        - present
    Prsent         - present
    La première ligne est parfaite, dans la suivante le "é" apparaît, mais il manque un caractère pour l'alignement, et dans la troisième l'accent n'apparaît pas et il manque un caractère (le code page de ma console est 65001)
    Je suis Charlie.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse

  8. #7
    pm42

    Re : Unicode

    Je ne peux pas trop t'aider sur ce coup là parce que comme je te disais, je n'ai pas d'environnement Windows de dev sous la main et que je n'ai pas la même résultat que toi sur OSX.

    Je me demande si tu ne devrais pas utiliser une librairie pour positionner le curseur où tu veux plutôt que de chercher à obtenir l'alignement.
    Il y a apparemment SetConsoleCursorPosition même si Microsoft conseille de passer à l'utilisation des "Console Virtual Terminal Sequences", c'est à dire les codes de contrôle du VT100 qui sont reconnus par la plupart des environnements Unix/Linux/OSX.

    Mais je ne sais pas s'ils proposent une librairie comme curses pour que ce soit simple et portable et avec le support complet de l'Unicode pour le même prix.

  9. #8
    Médiat

    Re : Unicode

    Merci de ta réponse, j'utilise déjà le SetConsoleCursorPosition, mais cela me ferait faire beaucoup de modifications.

    J'ai entendu parlé de curses, je vais jeter un oeil.
    Je suis Charlie.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse

  10. #9
    Médiat

    Re : Unicode

    pm et ceux qui auraient le même problème, j'ai totalement résolu le souci en ajoutant
    setlocale(LC_ALL, ".65001");
    au début du main, où 65001 est la page de code que je voulais dans ma console.
    Je suis Charlie.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse

  11. #10
    pm42

    Re : Unicode

    Ok. Je ne sais pas ce que tu codes mais le C et le mode texte, c'est un peu à l'ancienne avec tout le respect que je te dois.
    Ceci dit, si cela correspond à ton besoin, cela peut être efficace mais je me demande quel serait le rapport coût/bénéfice à passer sur des trucs plus récents.

  12. #11
    Médiat

    Re : Unicode

    Citation Envoyé par pm42 Voir le message
    Ok. Je ne sais pas ce que tu codes mais le C et le mode texte, c'est un peu à l'ancienne avec tout le respect que je te dois.
    Oui, je sais, mais moi-même je suis à l'ancienne


    Ceci dit, si cela correspond à ton besoin, cela peut être efficace mais je me demande quel serait le rapport coût/bénéfice à passer sur des trucs plus récents.
    Reprise d'un très vieux (et gros) programme, passer à autre chose serait un gros travail pour à peu près 0 bénéfice

    Encore merci de ton aide
    Je suis Charlie.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse

Discussions similaires

  1. conversion unicode -> Ascii + ascii étendu français VB.NET
    Par riri95 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 06/12/2012, 14h20
  2. Représentation unicode en utf 8 en hexadécimal
    Par invite7103f2f6 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 11/11/2012, 18h12