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

Langages de programmation Discussion :

Problème avec l'unicode


Sujet :

Langages de programmation

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Points : 231
    Points
    231
    Par défaut Problème avec l'unicode
    Salut à tous,

    Bon je sais pas si je suis dans la bonne section, mais mon probleme est le suivant :
    J'ai (dans une table SQL) une colonne qui contient une chaîne de caracteres unicode mal terminée ou contenant des caracteres non tolérés.
    J'ai donc regardé en hexa ma chaîne de caractere, et au lieu d'avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    0x45006D0070006C006F0079006500650028007300290020003A002000
    (ce qui correspond à la chaîne : "Employee(s) : ")
    j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    0x45006D0070006C006F0079006500650028007300290020003A00200000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F000000070000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F000000070000003F0000003F0000003F00
    et ca m**** completement.

    Donc je m'interroge :
    1/Pourquoi ma chaîne ne commence-t-elle pas par 0045 ?
    2/La décomposition c'est bien par 4 non ? donc (00)45 006D 0070 etc... ce qui veut dire que dans le "bon" cas ca finit par "00", c'est normal ? ca ne devrait pas aller par 4 normalement là aussi ?
    3/qu'est ce que c'est que ces caracteres qui s'ajoutent ?? 0000 il me semble que ca correspond à NULL, mais 0007 c'est un caractere par contre...

    bref : c'est le bordel ! :'(

    Merci d'avance !

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Citation Envoyé par nox75 Voir le message
    1/Pourquoi ma chaîne ne commence-t-elle pas par 0045 ?
    Pour le mapping ASCII <-> Unicode (quand les caractères peuvent passer de l'un à l'autre), le double zéro (00) est à droite :

    'E' = 45 00

    2/La décomposition c'est bien par 4 non ?
    Oui.
    donc (00)45 006D 0070 etc... ce qui veut dire que dans le "bon" cas ca finit par "00", c'est normal ? ca ne devrait pas aller par 4 normalement là aussi ?
    cf. 1)

    45 00 6D 00 70 00 6C 00 6F 00 79 00 65 00 65 00
    28 00 73 00 29 00 20 00 3A 00 20 00 00 00
    Employee(s) _:_
    Apparemment, je ne vois aucun problèmes.

    3/qu'est ce que c'est que ces caracteres qui s'ajoutent ??
    Je ne sais pas (concernant les "3F 00") mais à partir du moment ou le '\0' (double zéro en unicode) terminal est là, le reste n'est pas très important je pense.

    0000 il me semble que ca correspond à NULL
    Oui.

    mais 0007 c'est un caractere par contre...
    Il y a :
    - "70 00" : 'p'
    - "79 00" : 'y'
    - "73 00" : 's'

    Mais je ne vois pas de 0007...

    Bref, à moins d'avoir loupé quelque chose, je ne vois pas de problèmes apparent.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Points : 231
    Points
    231
    Par défaut
    Bonjour,
    Citation Envoyé par Neitsa Voir le message
    Pour le mapping ASCII <-> Unicode (quand les caractères peuvent passer de l'un à l'autre), le double zéro (00) est à droite :
    D'accord voila qui m'éclaire deja pas mal
    Citation Envoyé par Neitsa Voir le message
    Apparemment, je ne vois aucun problèmes.
    Je ne sais pas (concernant les "3F 00") mais à partir du moment ou le '\0' (double zéro en unicode) terminal est là, le reste n'est pas très important je pense.
    Justement je pense que c'est le fait qu'il y ait quelque chose apres le 00 00, qui donc si j'ai bien compris indique la fin de chaîne, qui fait que ca pose probleme.
    Donc je vais devoir tronquer ma chaîne.
    Le problème reste maintenant de savoir si ces éléments situés apres doivent être conservés ou s'ils proviennent d'une erreur quelconque.
    Bref s'agit-il de données...
    Je ne trouve nulle part le 3F 00, et quand j'essaye de le convertir en char, je ne vois qu'un petit carré (ce qui voudrait dire que c'est un caractere asiatique ou autre si je ne m'abuse).
    Le 07 00 ca serait apparemment le point d'interrogation.
    Bref je suis perplexe.

    Mais un grand merci pour ton aide qui m'aide deja beaucoup à y voir plus clair !

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Juo,
    Citation Envoyé par Neitsa Voir le message
    Pour le mapping ASCII <-> Unicode (quand les caractères peuvent passer de l'un à l'autre), le double zéro (00) est à droite
    Pas forcément, Unicode sait gérer aussi bien les Big et Little Endian, l'ordre dépend donc du logiciel qui a créé le fichier.
    Si les cons volaient, il ferait nuit à midi.

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 167
    Points : 220
    Points
    220
    Par défaut
    Citation Envoyé par nox75 Voir le message
    3/qu'est ce que c'est que ces caracteres qui s'ajoutent ??
    Ca ne viendrait pas du fait que cette colonne soit typée en char ?
    Franckintosh, penseur différent.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Points : 231
    Points
    231
    Par défaut
    Citation Envoyé par Franckintosh Voir le message
    Ca ne viendrait pas du fait que cette colonne soit typée en char ?
    Non c'est la premiere chose que j'ai vérifié, c'est bien du nvarchar : /

  7. #7
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Citation Envoyé par droggo Voir le message
    Juo,

    Pas forcément, Unicode sait gérer aussi bien les Big et Little Endian, l'ordre dépend donc du logiciel qui a créé le fichier.
    Oui c'est vrai, tu as tout à fait raison. J'aurais dû préciser que la réponse était relative à l'exemple du posteur (en little endian).

    Ceci dit, pour en revenir au problème, je ne vois absolument pas d'où ça vient. Je ne comprend pas pourquoi il n'y pas d'arrêt à la fin de la chaîne unicode (le '\0' unicode)...

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Points : 231
    Points
    231
    Par défaut
    Citation Envoyé par Neitsa Voir le message
    Ceci dit, pour en revenir au problème, je ne vois absolument pas d'où ça vient. Je ne comprend pas pourquoi il n'y pas d'arrêt à la fin de la chaîne unicode (le '\0' unicode)...
    Oui donc on est bien d'accord que ma chaîne devrait se limiter à
    45 00 6D 00 70 00 6C 00 6F 00 79 00 65 00 65 00
    28 00 73 00 29 00 20 00 3A 00 20 00 00 00

    le 00 00 marque la fin de chaîne, c'est bien ca ?
    Donc tout ce qui se situe apres :
    -soit c'est des données et je dois les rentrer dans la chaîne (et comprendre ce que ca fout la >_<)
    -soit c'est un espece de padding bizarre qui ne veut rien dire et je tronque sauvagement (et j'essaye de comprendre ce que ca fout la >_<)

Discussions similaires

  1. Problème avec les unicodes
    Par ghir_ana dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 22/09/2012, 14h53
  2. Problème avec l'unicode
    Par djangers dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/03/2006, 13h20
  3. Problème avec l'unicode et les exceptions
    Par Rafy dans le forum C++
    Réponses: 5
    Dernier message: 07/02/2006, 00h52
  4. Petit problème avec GCC pour l'Unicode...
    Par Nico*3-3 dans le forum Autres éditeurs
    Réponses: 6
    Dernier message: 29/01/2006, 17h12
  5. [CR(10)]Problème avec unicode (japonais)
    Par speed034 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 26/05/2005, 09h55

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