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 SQL Discussion :

Conversion de ASCII vers Unicode


Sujet :

Langage SQL

  1. #1
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut Conversion de ASCII vers Unicode
    Bonjour,

    alors voilà, dans un champ, j'ai un mélange de caractères Unicodes (chinois en l'occurence) ainsi que des caractères ASCII.

    Ma problématique, vouloir transformer le tout en un ensemble homogène Unicode.

    Pourquoi?
    Je souhaite concaténer à la suite de ce champs, d'autres champs, mais toujours à la même position, seulement quand les deux types sont mélangés, c'est impossible, j'ai toujours un décalage (cela vient probablement du fait qu'en ASCII, 1 char = 1 octets, en Unicode, bien plus...)

    Y a t-il une manière simple de procéder?

    Précision : SGBD => Sybase ASE v. 15.0



  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour @buchs,

    Ne serait-il pas possible de déterminer la longueur de ta chaîne avec un DATALENGTH et de l'intégrer avec un remplissage à gauche avec REPLICATE ?


  3. #3
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Salut Chtulus,

    pense bien que j'ai essayé, voici ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select convert(unichar(21), "'" + designation)
         + replicate(convert(unichar(20), " "), 20 - char_length(convert(unichar(20), designation))) + convert(unichar(1), "'")
    from maTable
    Mais j'ai toujours ce décalage...

    Puis pour vous montrer le résultat, que j'obtiens, ça risque d'être délicat étant donné qu'il comporte des caractères unicodes (de plus certaines données peuvent être sensibles...)

    P.S : je tiens à préciser que le découpage se fait bien et que j'ai bien 20 caractères de désignation, seulement au niveau visuel, un décalage apparaît

    C'est compréhensible ou bien ça serait plus explicite avec une vue du résultat?

  4. #4
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Désolé

    C'est compréhensible ou bien ça serait plus explicite avec une vue du résultat?
    Non je comprends ce que tu veux dire !


  5. #5
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    En fait voici un extrait de résultat :

    ----
    '立顿奶茶s10 24*10*15g-H'
    '乐新一品鲜鸡精(北京)120*100G'
    ----

    Les deux lignes font bien 20 caractères, seulement la fin de chaque n'est pas située au même endroit.

    Et pour cause, en Unicode : un caractère est codé sur deux octets (ou plus) et prend donc la place de deux (ou plus) caractères ascii...

    Ce que moi je souhaiterais obtenir c'est donc :
    ----
    '立顿奶茶s10 24*10*15g-H.........'
    '家乐新一品鲜鸡精(北京)120*100G'
    ----


    Comment faire pour encoder les caracètes ASCII en Unicode?

  6. #6
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    J'ai trouvé

    C'est un truc pas propre, mais ça a le mérite de fonctionner :

    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
     
    /*  ====================
            TRANSFORMATION
            TO UNICODE
        ====================    */
    -- ASCII TABLE FROM '!' TO 'z'
    DECLARE @i int
    SELECT @i = 1
    WHILE @i < 92
    BEGIN
        UPDATE detail
           SET des = str_replace(des, char(32 + @i), to_unichar(65280 + @i))
        WHERE des IS NOT null
     
        SELECT @i = @i + 1
    END
     
    -- ASCII space to Unicode space
    UPDATE detail
       SET des = str_replace(des, ' ', to_unichar(12288))
    WHERE des IS NOT NULL
    En espérant que ça serve à d'autres


    ++

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 16/09/2014, 12h59
  2. Convertion ASCII vers UNICODE
    Par blackstrobe dans le forum Langage
    Réponses: 4
    Dernier message: 27/07/2007, 20h48
  3. Conversion de chaine vers unicode
    Par viny dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 08/01/2007, 22h22
  4. conversion chaîne multioctets vers unicode
    Par Bruno75 dans le forum Delphi
    Réponses: 1
    Dernier message: 25/09/2006, 15h53
  5. Conversion texte Ascii vers Image ou Pdf
    Par davydreyAXESS dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2006, 15h45

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