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

Windows Discussion :

Problème Unicode en C


Sujet :

Windows

  1. #41
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 6
    Points
    6
    Par défaut
    C'est bon, j'ai trouver erreur, je peux pas remplir string en mode globale !! !! je suis encore débutant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    _stprintf(a,L"\u0623");
    _stprintf(b,L"\u0628");
    if( strcmp( a, b ) == 0 ){
    MessageBoxW(NULL,L"Oui",L"Oui",MB_OK|MB_RTLREADING|MB_RIGHT);
    }else{
    MessageBoxW(NULL,L"Non",L"Non",MB_OK|MB_RTLREADING|MB_RIGHT);
    }
    Mais! je get warning, je crois que c'est a propos de strcmp(a,b)

    warning: assignment from incompatible pointer type
    warning: assignment from incompatible pointer type


    il ce compile est compare bien! mais je fait quoi pour comparer les deux variable Unicode a et b sans warning ?

  2. #42
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 6
    Points
    6
    Par défaut
    Oui tu es raison Médinoc, a = L""; ça marche pas !
    mais je fait quoi a propos de warning ?

  3. #43
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Pour des TCHAR, il faut utiliser _tcscmp() au lieu de strcmp(). Pour des wchar_t, il faut utiliser wcscmp().

    PS: D'ailleurs, dans ce que tu fais, _tcscpy() serait plus efficace que _tprintf()...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #44
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 6
    Points
    6
    Par défaut
    Tu es raison pour tous monsieur Médinoc, Merci beaucoup
    une petite question sil te plaît

    Dans mon cas, je utilise TCHAR ou wchar_t ? plus tôt c'est quoi la différence ?

    Si je veux ajouter un variable I au string A avant de le comparer avec string B, je utilise toujours _stprintf ?

    Est Merci Encore

  5. #45
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    Pourquoi as-tu choisi ce compilateur en fait?
    Es-tu autorisé à utiliser C++?

  6. #46
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 6
    Points
    6
    Par défaut
    Franchement, j'ai sente de l'amour vers les application de 3K a la place du 33K du GCC ou BCC32 ou MV !!! !!!

    Est en plus TCC ne supporte pas C++ !!!

    Mais... Je peux changer compilateur si je peux développez plus facile avec C++ !!

    Tu crois maxim_um que C++ plus facile ? au tente que j'ai lut dans un article que Microsoft développez WIN32-API's en C ça mean que C mieux efficace dans ce cas !, non ?

  7. #47
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    Avec C++, ton rêve il se réalise tout de suite.

    Pour être performant en C, il faut bien savoir jongler avec la mémoire de l'ordinateur.
    Dans l'ensemble, C99 a un peu arrangé les choses, mais dès que ça sort de l'ordinaire, ça se complique. D'ailleurs, le premier code que je t'ai proposé, c'est du C++. C'est après que je me suis rendu compte que tu voulais un exemple en C, mais comme je savais qu'il était compatible C99, je n'ai pas eu à le modifier, mais simplement omis (oublié) de préciser (dire) qu'il fallait ajouter «-std=c99» dans les options de compilations.

    Enfin quoi qu'il en soit, je te propose de télécharger «Code::Blocks Studio» ou «MinGW Developer Studio», ensuite tu verras qu'il n'y a pas photo.

    Sinon, «Eclipse CDT» ou encore «Visual C++ Express», mais pour ceux là il te faudra beaucoup beaucoup plus de place sur ton disque dur.

    Tu pourras trouver les liens de téléchargement sur ces deux pages:

    http://cpp.developpez.com/outils/
    http://c.developpez.com/compilateurs/?page=edi-free

  8. #48
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Au passage, tu peux aussi programmer en C sous Code::Blocks et Visual, hein...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #49
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Points : 403
    Points
    403
    Par défaut
    Salut,

    Pour ce type de problème de conversion de chaînes de caractères, il y a peut-être iconv ( avec iconv.h et sa librairie ) qui pourrait être une solution ?

  10. #50
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 6
    Points
    6
    Par défaut
    Salut les programmeurs,

    J'ai déjà tous ces logicielles, mais mon projet need un compilateur en mode lin-de-commande, dans mon cas je peux utilise juste GCC (MinGW) ou BCC32, mais la, je voudrai bien juste savoir si C++ est vraiment plus facile que C ou non !, cars pleins du monde dans les forums english/french développez que en C !, mais bon! je crois que C mieux beaucoup si on gère bien la mémoire

  11. #51
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Visual Studio - VisualC++ peut être lancé en ligne de command.

  12. #52
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    Sacrée question que tu poses là.

    Tout ce que je peux te dire, c'est qu'il n'existe pas une vraie réponse à cette question, car chacun a ses préférences.

  13. #53
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 6
    Points
    6
    Par défaut
    Salut les programmeurs,

    Oui, vous avez raison, chaque langage a ces points forte et faible, est chaqu'un son préférence

    Mon petit projet est de développez un " petite intercepteur des commandes Unicode en C avec TCC ", j'ai bien avancer dans mon projet gras a vous aide, encore merci a vous tous, mais la j'ai des difficulté avec l'interface ! j'ai beaucoup chercher sur l'internet mais aucun solution trouver

    But:
    Petite invite de commande Unicode comme MSDOS, Win32 API en C.

    Exemple:
    votre nom?: abc
    vous êtes abc.


    ----------------------------------

    Maintenant je dois commencer par lire les touches du clavier est afficher lettre correspondance dans texte-box!, j'ai tester d'abord avec un STATIC-CONTROL (comme label en VB), mais j'arrive pas a ajouter du texte !

    * Crée une edit control static, ajouter "abc"
    * Quand utilisateur touche [A], ajouter "AAA" a notre edit
    * normalement le résultat doit être "abcAAA" quand je appuyer sur [A]

    mais c'est ça résultat !!

    Lancement du l'application:


    Appuyer sur [A]:


    Réduire est puis agrandir fenêtre !!!


    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    HWND hEdit;
    
    LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ){
    switch(msg)
    {
    
    case WM_CREATE:
      {
         hEdit = CreateWindow(L"STATIC",L"abc",WS_VISIBLE|WS_CHILD|SS_RIGHT|WS_BORDER,0,0,100,100,hwnd,(HMENU)1,NULL,NULL);
      }
    
    case WM_COMMAND:
      {
         case WM_KEYDOWN:
          {
            switch(wParam)
             {
             // quand appuyer sur A avec Focus sur fenêtre, Static ne focus pas.
             case 'A':
             SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM) L"AAA");
             //normalement le résultat doit être "abcAAA"
             break;
             }
          }
      }
    }
    J'ai penser a UpdateWindow() mais ça marche pas!
    après l'affichage du texte, je need lire la dernier ligne, lire commande, ne pas effacer la question "votre nom?:" etc... pour quille devine un petit intercepteur du commandes simple !!

    Maintenant pour quoi a votre avis les deux texte afficher dans la même place ?

  14. #54
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 6
    Points
    6
    Par défaut
    J'ai tester avec EDIT CONTROL, j'arrive pas a recevoir les touches du clavier de Edit Control alors j'ai la désactiver !!! pour recevoir les touches par fenêtre !!! ... aussi la même problème !!!

    Lancer l'application:


    Appuyer sur [A]


    Appuyer sur [B]


    C'est une version non-Unicode celle la!
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    #include <windows.h>
    
    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
    HBRUSH g_hbrBackground = NULL;
    HWND hEdit;
    
    LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ){
    switch(msg){
    
     case WM_CREATE:
      {
     
    hEdit = CreateWindow("EDIT","",WS_VISIBLE|WS_CHILD|WS_BORDER|WS_VSCROLL|WS_HSCROLL|ES_MULTILINE|ES_WANTRETURN|ES_AUTOHSCROLL|ES_AUTOVSCROLL|WS_DISABLED,0,0,100,100,hwnd,(HMENU)1,NULL,NULL);
               
      }break;
      
     case WM_COMMAND:
      {
    
       case WM_KEYDOWN:
    {
         switch(wParam)
         {
             case 'A':
              SendMessage(hEdit, WM_SETTEXT, 1, (LPARAM)(LPCTSTR)"A");
             break;
             
             case 'B':
              SendMessage(hEdit, WM_SETTEXT, 1, (LPARAM)(LPCTSTR)"B");
             break;
             
             default:
             break;
         }
    }
       }break;
      
      case WM_SIZE:
      {
       HWND hEdit;
       RECT rcClient;
       GetClientRect(hwnd, &rcClient);
       hEdit = GetDlgItem(hwnd, 1);
       SetWindowPos(hEdit, NULL, 0, 0, rcClient.right, rcClient.bottom, SWP_NOZORDER);
      }break;
    
    case WM_CTLCOLORSTATIC:
          {
            HDC  hdc  = (HDC)  wParam ;
            HWND ctrl = (HWND) lParam ;
            SetBkMode( hdc, TRANSPARENT );
            SetTextColor( hdc, RGB(0, 0, 0) );
            return (LRESULT)GetStockObject(NULL_BRUSH); 
          }break;
    
      case WM_DESTROY:
      {
       PostQuitMessage(0);
      }break;
      
      default:
    	 return DefWindowProc(hwnd, msg, wParam, lParam);
    	}
    	return 0;
    }
    
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
     MSG msg;
     HWND hwnd;
     WNDCLASS wc;
     wc.style=CS_HREDRAW|CS_VREDRAW;
     wc.cbClsExtra=0;
     wc.cbWndExtra=0;
     wc.lpszClassName="window";
     wc.hInstance=hInstance;
     wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
     wc.lpszMenuName=NULL;
     wc.lpfnWndProc=WndProc;
     wc.hCursor=LoadCursor(NULL, IDC_ARROW);
     wc.hIcon=LoadIcon(NULL, IDI_APPLICATION);
     RegisterClass(&wc);
     hwnd=CreateWindow( 
     wc.lpszClassName,
     "TEST",
     WS_OVERLAPPEDWINDOW|WS_VISIBLE,
     100,100,300,250,NULL,NULL,hInstance,NULL);
     ShowWindow(hwnd,nCmdShow);
     UpdateWindow(hwnd);
     while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}
    return(int)msg.wParam;}
    Sil vous plaît, vous avez une autre idée ? Edit Control ou Static Control ?

    Rappelle:
    Je veux développez une petit intercepteur du commandes comme MSDOS quoi!

  15. #55
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Si mes souvenir sont bons, il existe des librairies qui prennent en charge la gestion d'un prompt en mode console.

    Google m'a donné ça :
    http://www.wanderinghorse.net/wh/com...sh/eshell.html

  16. #56
    Membre actif Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Points : 237
    Points
    237
    Par défaut
    Citation Envoyé par freesaif Voir le message
    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
    17
    case WM_KEYDOWN:
    {
         switch(wParam)
         {
             case 'A':
              SendMessage(hEdit, WM_SETTEXT, 1, (LPARAM)(LPCTSTR)"A");
             break;
             
             case 'B':
              SendMessage(hEdit, WM_SETTEXT, 1, (LPARAM)(LPCTSTR)"B");
             break;
             
             default:
             break;
         }
    }
    Le problème c'est que tu remplaces le texte qu'il y a déjà dans le static, il faut ajouter du texte. En pseudo-code ça donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    str = GetWindowText
    str = concatener(str, touche)
    SetWindowText(str)
    Note: tu peux utiliser GetWindowText et SetWindowText au lieu d'envoyer les messages à la main.

  17. #57
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 6
    Points
    6
    Par défaut
    Salut les programmeurs,

    GetWindowText et SetWindowText marche bien dans mes applications TEST (NON-UNICODE) mais il y a des difficulté dans mon projet (UNICODE).

    But: Petite calculatrice
    int A
    TextBox "55"
    Lire TextBox -> mettre resultat dans A
    A = A + 1
    titre de la fenetre = A
    (normalement résultat doit être 56)

    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
    wchar_t BUFFER_1[1024];
    wchar_t BUFFER_2[1024];
    long LANG_1;
    static HWND TEXTBOX;
    int a=0;
    ...
    TEXTBOX = CreateWindow(L"Edit",L"55",...);
    ...
    LANG_1=GetWindowTextLength(TEXTBOX)+1;
    GetWindowText(TEXTBOX,BUFFER_1,LANG_1);
    //_stprintf(a,L"%s",BUFFER_1);
    a=atoi(BUFFER_1);
    a=a+1;
    _stprintf(BUFFER_2,L"%d",a);
    SetWindowTextW(hwnd,BUFFER_2);
    Résultat dans titre de la fenêtre est "6" !!!
    ca veu dire que a contiens que premier char du BUFFER_1 ( a = atoi (BUFFER_1) ; )

    J'ai utilise atoi() pour conversation du string vers integer.
    Probleme: atoi() donne que premier char â a, par contre dans mes application non-Unicode donne tous le string... je fait quoi ?!

    NOTE: J'ai trouvez beaucoup des problèmes dans ce projet Unicode, il va bientôt me tue!

  18. #58
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Il ne crie pas ton compilateur avec
    Parce que BUFFER_1 est wchar_t et atoi est prévue pour char.

    Il faudrait plutôt utiliser _ttoi() pour être compatible UNICODE et ANSI
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  19. #59
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    TCHAR BUFFER_1[1024];
    TCHAR BUFFER_2[1024];
    long LANG_1;
    static HWND TEXTBOX;
    int a=0;
    ...
    TEXTBOX = CreateWindow(TEXT("Edit"), TEXT("55"), ...);
    ...
    LANG_1=GetWindowTextLength(TEXTBOX)+1;
    GetWindowText(TEXTBOX,BUFFER_1,LANG_1);
    //_stprintf(a, TEXT("%s"), BUFFER_1);
    a=_ttoi(BUFFER_1);
    a=a+1;
    _stprintf(BUFFER_2, TEXT("%d"), a);
    SetWindowText(hwnd,BUFFER_2);
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  20. #60
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 6
    Points
    6
    Par défaut
    Salut les programmeurs;

    Oui, vous avez raison, c'est exactement _ttoi, est j'ai trouver une liste complet, les fonctions ANSI est l'équivalant Unicode ici:
    http://www.i18nguy.com/unicode/c-unicode.html
    Est j'ai encore avancer dans mon projet gras a vous, Merci beaucoup

    Une parte de mon projet, je dois lire un fichier texte Unicode ligne par ligne, mais cette fois avec compilateur GCC qui support UTF-8

    Application en C, mode console avec GCC.

    Lire fichier "test.txt"
    Lire premier ligne
    si premier ligne = " ب " faire
    ecrire "Oui"
    si non faire
    ecrire "Non"
    lire ligne suivant ...


    Lecture du fichier c'est fait, ligne par ligne aussi fait, mais encore ce problème des strings Unicode marche pas !!

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #define UNICODE
    #ifdef UNICODE
    #define _UNICODE
    #else
    #define _MBCS
    #endif
    #include <windows.h>
    #include <tchar.h> 
    #include <stdio.h>
    int main(){
    
    wchar_t *inname=L"test.text";
    wchar_t LINE[1024];
    int LINE_LEN=0;
    long line_number=0;
    FILE *infile;
    
    // wchar_t a[32]; // deja tester mais la même problème
    // wchar_t b[32];
    
    infile = _wfopen ( inname , L"r+,ccs = UTF-8" ); // ou ccs = UNICODE
    
    if ( !infile ) {
    wprintf ( L"FILE ERROR: '%s'. \n" , inname ); return 0;
    }
    
    line_number = 0;
    while ( fgetws ( LINE , sizeof(LINE) , infile) != NULL ){
    ++line_number;
    LINE_LEN = wcslen(LINE)-1;
    if ( LINE[LINE_LEN] == '\n' ) { LINE[LINE_LEN] = 0; }
    
    // ici on est texte du premier ligne sans '\0' dans LINE, c'est bon jusque la! 
    
    //_stprintf(a,L"ب"); // deja tester mais la même problème
    //_stprintf(b,LINE);
    // if(_tcscmp( a , b )==0){ // deja tester mais la même problème 
    
    if ( _tcscmp ( L"ب" , LINE ) == 0 )
    {
      wprintf(TEXT("Oui\n"));
    }
    else
    {
      wprintf(L"Non. LINE = '%s' \n",LINE);
    }
    
    }return 0;}
    Compilation aucun erreur.
    fichier test.txt fait avec Notepad code en UTF-8/UNICODE contiens:
    Résultat dans DOS:

    Non. LINE = 'a'
    Non. LINE = 'ب'
    Non. LINE = 'c'


    Le problème est que toujours compares-an fini par NON! !

    je crois l'erreur est:

    • Soit _wfopen() lire pas les chars unicode !!!
    • Soit LINE contiens pas les chars Unicode !!!
    • Soit _tcscmp() male utilise pour compare deux string Unicode !!!


    Note:
    • Dans ligne 1 résultat est "∩╗┐a", je crois que ∩╗┐ est des code défini par Notepad a la tête des fichier code en UTF-8/Unicode.
    • J'ai tester plusieurs fonctions Unicode, mais toujours la même résultat "Non...".
    • Résultat est bon si on test avec: _tcscmp( L"c" , LINE ), Résultat:
      Non. LINE = 'a'
      Non. LINE = 'ب'
      Oui


    Encore Merci les programmeurs pour votre l'aide est j'attarderais votre idée a propos de ce mini problème

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. Problème unicode / caractères spéciaux + écriture de fichier
    Par Mysti¢ dans le forum Général Python
    Réponses: 12
    Dernier message: 01/12/2010, 12h38
  2. Problème unicode avec _ungetwch() (conio)
    Par haypo dans le forum Windows
    Réponses: 1
    Dernier message: 05/04/2009, 14h24
  3. [D7] Problème UNICODE : TTntStringList
    Par Zepeq dans le forum Composants VCL
    Réponses: 0
    Dernier message: 06/03/2008, 16h19
  4. [MySQL] Problème unicode sortie BD (MySQL 5)
    Par bractar dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/05/2007, 08h34
  5. Problème unicode sortie BD
    Par bractar dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 18/05/2007, 16h20

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