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

Bibliothèques, systèmes et outils C Discussion :

convertir UTF8 en ASCII Uppercase


Sujet :

Bibliothèques, systèmes et outils C

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut convertir UTF8 en ASCII Uppercase
    Bonjour je cherche une petite fonction testée permettant de convertir de l'utf8 en ASCII Uppercase

    Avez-vous déja rencontré cela ?

    Merci
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Les fonctions à utiliser seront mbtowc et toupper. La manière d'utiliser la première varie en fonction du système d'exploitation et du compilateur. Quel OS et quel compilateur utilises-tu donc ?

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut

    J'utilise VS 6.0.
    J'ai trouvé mbtowc que je ne connaissais pas.
    Maintenant comment faire pour l'utiliser ?

    J'ai une chaine exemple : comment faire pour detecter la présence d'un caractère multi-byte et sa longueur pour le convertir ?

    Mühldorf am Inn, gemeindefreies Gebiet

    En fait je pense que ce n'est pas de l'utf8 mais du MBCS

    M<195><188>hldorf am Inn, gemeindefreies Gebiet
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    La version de mbstowcs de Visual ne supporte pas l'UTF-8, tu devras faire appel à l'API Windows, à savoir à la fonction MultiByteToWideChar. Cette fonction permet d'encoder une chaîne de caractères en UTF-16 (wide character string), l'encodage natif de Windows.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include <stdio.h>
    #include <windows.h>
     
    int main()
    {
        const char * buf = "Mühldorf am Inn, gemeindefreies Gebiet";
        wchar_t outbuf[100];
     
        MultiByteToWideChar(CP_UTF8, 0, buf, -1, outbuf, sizeof(outbuf) / sizeof(outbuf[0]));
        MessageBoxW(NULL, outbuf, L"Message", 0);
     
        CharUpperBuffW(outbuf, sizeof(outbuf) / sizeof(outbuf[0]));
        MessageBoxW(NULL, outbuf, L"Message", 0);
     
        return 0;
    }
    Ce programme affiche "Mühldorf am Inn, gemeindefreies Gebiet" (premier MessageBox) ensuite la même phrase en lettres capitales (deuxième MessageBox).
    En fait je pense que ce n'est pas de l'utf8 mais du MBCS
    Une chaîne UTF-8 est un MBCS .

  5. #5
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci melem

    Je vais essayer cela
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  6. #6
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Meci melem

    Ca fonctionne "presque"

    - Mon app est en console donc j'ai du inclure windows.h "de force", mais pas de problème

    - Le resultat est en integer que j'aimerais convertir en ANSI : tu sais comment ? (a part faire un boucle sur chaque element)

    - La methode CharUpperBuffW(outbuf, sizeof(outbuf)); ne rends pas un vrai code ASCII Majuscule (A-Z) je vais donc utiliser une table de conversion mais j'ai l'habitude, le plus important c'etait l'utilisation de MultiByteToWideChar pour transformer cet utf-8
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  7. #7
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Mon app est en console donc j'ai du inclure windows.h "de force"
    Je ne comprends pas.

    Le resultat est en integer que j'aimerais convertir en ANSI : tu sais comment ? (a part faire un boucle sur chaque element)
    Utilise wcstombs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const wchar * widestring = L"Mühldorf am Inn, gemeindefreies Gebiet";
    char ansistring buf[100];
    wcstombs(ansistring, widestring, sizeof(ansistring) / sizeof(ansistring[0]));
    CharUpperBuffA(ansistring, sizeof(ansistring) / sizeof(ansistring[0]))
    D'ailleurs en pasant, il faut que tu changes tout les sizeof(buffer) précédents en sizeof(buffer) / sizeof(buffer[0]). C'étaient de grosses erreurs de ma part.

  8. #8
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci pour ton aide précieuse melem

    je vais pouvoir travailler avec cela

    Le petit bemol pour windows.h c'est qu'a l'avenir je voudrais aussi compiler sous linux et que focément je devrais utiliser d'autres methodes (et je trouve que la librairie lconv est un mamouth pour faire cela)

    Mais dans l'immediat tes suggestions m'aident beaucoup
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [NASM] Convertir en code ascii un nombre binaire
    Par noubigh dans le forum Assembleur
    Réponses: 1
    Dernier message: 29/06/2006, 11h52
  2. [xslt][xalan] convertir caracteres en ascii
    Par bernols dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 04/05/2006, 11h24
  3. Convertir des codes ASCII en lettres
    Par grigri dans le forum Pascal
    Réponses: 4
    Dernier message: 14/04/2006, 11h54
  4. [Free Pascal] Convertir un code ASCII en entier
    Par JoseF dans le forum Free Pascal
    Réponses: 13
    Dernier message: 04/04/2006, 19h30
  5. [mx2004]Convertir un code ASCII en une lettre
    Par caramel dans le forum Flash
    Réponses: 3
    Dernier message: 28/01/2004, 16h26

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