Forum iSeries, hébergé par xdocs400.com

As400, iSeries, i5, System i, une machine qui évolue pour être de plus en plus puissante.

Vous n'êtes pas identifié(e).

Annonce

ATTENTION : Le système anti-spam est à nouveau opérationnel. Nous avons réactivé les inscriptions.

#1 2018-09-07 09:23:04

plaunay
Membre
Inscription : 2012-12-21
Messages : 35

Webservice(WAS) imposible de récupérer des caratères Chinois(utf-8)

Bonjour

Dans le cadre d’une étude de projet, j’essaye de récupérer un string (caractère chinois utf-8).

J’ai créé un webservice(WAS) baser sur un RPGLE. 

[== Indéfini ==]
d Main            pr                  ExtPgm('TESTDBCS02')   
d  DataIn1                      20g                          
d  DataIn2                      20g                          
d Main            pi                                         
d  DataIn1                      20g                          
d  DataIn2                      20g                          
 /free                                                       
       datain2  = datain1 ;                                  
                                                             
  *inlr = *on ;                                              
 /end-free                                                   

d Main            pr                  ExtPgm('TESTDBCS02')   
d  DataIn1                      20g                         
d  DataIn2                      20g                         
d Main            pi                                         
d  DataIn1                      20g                         
d  DataIn2                      20g                         
/free                                                       
       datain2  = datain1 ;                                 
                                                             
  *inlr = *on ;                                             
/end-free                                                   


Je l’appel a partir de l'outil SoapUI 
   <soapenv:Body><xsd:main><xsd:args0>
            <xsd:DATAIN1>? ? ? ? ? ? ? ? ? ?  </xsd:DATAIN1>
    </xsd:args0></xsd:main></soapenv:Body>

mais dans le la variable d'entré du programme je ne reçois que hex('3F403F403F40.....') 

J’ai supposé quand déclarent une variable d’entrée en graphique je récupérerai le string sans conversion.   
Quelqu’un a t’il déjà travail sur ce sujet.

Hors ligne

#2 2018-09-07 20:11:21

Skogkatt
Membre
Inscription : 2007-03-16
Messages : 236

Re : Webservice(WAS) imposible de récupérer des caratères Chinois(utf-8)

Bonjour

le zone de type G sont des zones DBCS et non des zones UTF-8.
Une zone UTF-8 est de type A avec un CCSID(1208) mais il me semble qu'il faut être en V7R3 pour avoir cette possibilté en RPG.

De base le RPG ne sait pas travailler en UTF-8.
par contre on peut faire de Unicode (UCS2).

Pour ma part lorsque j'ai besoin d'UTF-8  je travaille d'abords en UCS2 puis j'utilise l'api QlgTransformUCSData pour transfomer en UTF-8 dans une variable de type varchar().

Cdlt

Hors ligne

#3 2018-09-11 09:12:42

plaunay
Membre
Inscription : 2012-12-21
Messages : 35

Re : Webservice(WAS) imposible de récupérer des caratères Chinois(utf-8)

Merci Skogkatt

Ta réponse ma mis sur la voie, j'ai résolus mon problème.

Pour partager l'information voici mon implémentation pour créer un webservice(RGP) manipulent des caractères Chinois en v7r1m0.

Dans l'idée de récupérer les données UTF-8 sans conversion, j'avais déclaré les variables d'appel du programme en graphique
car le fichier de description d'interface 'PCML" les indentifier en  chartype="twobyte" ccsid="65535"
ce qui na pas marcher, je récupérer des blancs x'3F403F403F40...'

Je les ai déclaré directement en UCS2 suivant les conseilles de Skogkatt , (dans le PCML bien en UCS2 length="20" chartype="twobyte" ccsid="13488" )

la conversion UTF-8 <=> UCS2 se passe correctement.   
   

[== Indéfini ==]
fTESTDBCS02uf a e           K DISK                         
                                                           
                                                           
 *-- Déclaration des procédures --*                        
d Main            pr                  ExtPgm('TESTDBCS02') 
d  DataIn1                      20c   ccsid(13488)         
d  DataIn2                      20c   ccsid(13488)         
d Main            pi                                       
d  DataIn1                      20c   ccsid(13488)         
d  DataIn2                      20c   ccsid(13488)         
 /free    
...                                                 

Hors ligne

Pied de page des forums