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

Langage Java Discussion :

utf-8 comparaison caractères spéciaux


Sujet :

Langage Java

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 11
    Points
    11
    Par défaut utf-8 comparaison caractères spéciaux
    Bonjour,

    J'ai quelques problèmes d'encodage, lorsque je transfère des chaines de caractère en java vers une base de donnée (mysql) dont le champ est encodé en "utf8_unicode_ci"

    J'ai testé d'insérer "2" puis "²" dans ce champs, mais comme ce champ doit être unique, et que apparemment "2" et "²" sont identique, alors j'ai une erreur "Duplicate entry".

    J'aimerai savoir si cela est possible, sous java, de comparer ces deux chaines ("2" et "²" ) avant que je l'envoie à la base de donnée. Afin d'éviter l'erreur.

    J'ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static String removeAccent(String source) {
            return Normalizer.normalize(source.toLowerCase(), Normalizer.Form.NFD).replaceAll("[\u0300-\u036F]", "").trim();
        }
    Cela marche pour les caractères accentués mais pas dans ce cas là :/

    Existe t-il une technique permettant de comparer ces deux chaines ?

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    tu as le "unicode collation algorithm demo" -> http://unicode.org/reports/tr10/Sample/

    tu as la librairie ICU de ibm, qui implémente aussi cet algorithme. Note que le normalizer n'a rien à voir avec la collation autant que je sache. (je suis pas expert dans le domaine non plus)

  3. #3
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    merci de m'avoir répondu tchize_,

    pourrait - tu être un peu plus explicite sur l'usage sur cette lib ? si tu as un exemple concret qui pourrait mettre en évidence que la chaine "2" et "²" sont équivalente cela m'arrangerais. ou bien une autre lib peut importe tant que ca marche : )

    le normalizer me permet de comparer certaines chaines comme:
    "Cecî é une chène " et "cecI E UnE chenE".
    Dans ce cas ces deux chaines seraient équivalente du point de vue de ma base de donnée (codage : utf8_unicode_ci).

    Cependant quelques caractère passent à travers le filtre comme les chaines "2" et "²" qui sont équivalente pour l'encodage utf8_unicode_ci mais pas pour ma fonction removeAccent().

    J'aimerai donc trouver quelque chose de plus générique plutôt que de faire des patchs successifs jusqu'à ce que cela marche ...

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    désolé, j'ai pas d'exemple, tout ce que je vois, c'est la doc mysql qui précise l'équivalence suivant les spécification unicode, et que ICU fait la même chose, je suppose donc qu'on peux donc faire travailler les deux ensemble.

Discussions similaires

  1. mail(), UTF-8 et caractères spéciaux
    Par Mistic100 dans le forum Langage
    Réponses: 7
    Dernier message: 13/06/2012, 14h27
  2. Fichier UTF-8 et caractères spéciaux
    Par Royd938 dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 10/12/2008, 22h30
  3. caractères spéciaux et utf-8
    Par Marcelino dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 05/12/2008, 17h22
  4. comparaison de chaine avec caractères spéciaux
    Par loulag07 dans le forum Langage
    Réponses: 1
    Dernier message: 22/11/2007, 10h04
  5. Réponses: 1
    Dernier message: 25/10/2007, 11h49

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