Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > AS/400
AS/400 Le Forum d'entraide sur IBM AS/400 - iSeries. RPG.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/10/2011, 17h44   #1
Membre régulier
 
Inscription : octobre 2006
Messages : 111
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 111
Points : 92
Points : 92
Par défaut Ecran vert UTF-8 et caractère euro

Bonjour,
Je rencontre un souci et je ne comprend pas ce qui se passe.
Nous avons un fichier saisi via une interface Web (serveur Zend et Php), et il est "bien entendu" défini avec des zones en CCSID 1208 (UTF-8).
Nous avons besoin d'afficher le contenu d'une de ces zones de texte sur certains écrans verts.
Et là, surprise. Tous les caractères se convertissent bien, sauf ... le caractère euro.
Pourtant les sessions sont bien en CCSID 1147, et la conversion devrait donc bien se passer, mais non.
J'ai revérifié (et recompilé) le fichier écran, il a un QCHRID de 695 1147.
Rien à faire.
Bizarrement ce fichier a aussi un CCSID... Qui lui est 297, ce qui expliquerai tout, mais je ne trouve pas comment le changer/définir.

Une idée ?
m4k-Hurrican est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2011, 10h32   #2
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
Fais ce test pour voir :
Sous iSeries Navigator tu fais :

Code :
1
2
3
CREATE TABLE TESTEURO (UTF8FIELD VARCHAR (100 ) ccsid 1208   default null);
INSERT INTO TESTEURO VALUES('€');
select utf8field, hex(utf8field) from testeuro;
Tu devrais voir ton caractère €.
Ensuite côté écran vert, requête la même table sous STRSQL.
Si tu ne vois pas le €, fais un CHGJOB en 1147 et réessaye.
Résultat ?
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/10/2011, 08h57   #3
Membre régulier
 
Inscription : octobre 2006
Messages : 111
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 111
Points : 92
Points : 92
Bonjour,

Cà fonctionne bien... Mais les champs et la table sont en CCSID 1208.
Et c'est là que je ne comprends pas. Ma table existante utilisée en production sur plusieurs sites, créée de la même manière, a bien des champs en CCSID 1208, mais la table elle même est en 297 ! Et c'est çà qui semble poser problème donc.
Etrange... Voilà la définition de création de la table pour info si tu y vois quelque chose :
Code :
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
CREATE TABLE ELSOCODB.COMTIE (                                      
 ID BIGINT GENERATED ALWAYS AS IDENTITY (                           
 START WITH 1 INCREMENT BY 1                                        
 NO MINVALUE NO MAXVALUE                                            
 NO CYCLE NO ORDER                                                  
 CACHE 20 )                                                         
 ,                                                                  
 CODESOC CHAR(1) CCSID 1147 NOT NULL DEFAULT '' ,                   
 TYPETIERS CHAR(1) CCSID 1147 NOT NULL DEFAULT 'C' ,                
 CODETIERS INTEGER NOT NULL ,                                       
 COMMENTAIRE FOR COLUMN "COMMENT" CHAR(3000) CCSID 1208 NOT NULL ,  
 UPDATED TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,             
 CREATED TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,             
 UPDATEBY CHAR(10) CCSID 1147 NOT NULL ,                            
 CONSTRAINT ELSOCODB.Q_ELSOCODB_COMTIE_ID_00001 PRIMARY KEY( ID ) ) 
 ;                                                                  
                                                                    
LABEL ON TABLE ELSOCODB.COMTIE                                      
 IS 'Commentaires Tiers' ;                                          
                                                                    
LABEL ON COLUMN ELSOCODB.COMTIE                                     
( ID IS 'Id Enreg             ' ,                                   
 CODESOC IS 'Soc                  ' ,                               
 TYPETIERS IS 'Type                Tiers' ,                         
 CODETIERS IS 'Code Tiers           ' ,                      
 COMMENTAIRE IS 'Commentaire          ' ,                    
 UPDATED IS 'Horodatage màj       ' ,                        
 CREATED IS 'Horodat. créat.      ' ,                        
 UPDATEBY IS 'Utilis. MàJ          ' ) ;                     
                                                             
LABEL ON COLUMN ELSOCODB.COMTIE                              
( ID TEXT IS 'Id enregistrement' ,                           
 CODESOC TEXT IS 'Code société' ,                            
 TYPETIERS TEXT IS 'Type tiers (F/C)' ,                      
 CODETIERS TEXT IS 'Code Tiers' ,                            
 COMMENTAIRE TEXT IS 'Commentaire' ,                         
 UPDATED TEXT IS 'Horodatage mise à jour' ,                  
 CREATED TEXT IS 'Horodatage création' ,                     
 UPDATEBY TEXT IS 'Mis à jour par' ) ;
Edit et PS : Pour info mon système a un CCSID 1147 depuis le début, tous les jobs sont en 1147. Je ne sais pas d'où est sorti ce 297 qui était le CCSID de notre vieux 170 en V4R4, où cette table n'existait pas.
m4k-Hurrican est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 09h34   #4
Membre régulier
 
Inscription : octobre 2006
Messages : 111
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 111
Points : 92
Points : 92
Tu m'as donné une idée en fait. Et j'ai sorti le caractère "euro" en hex... Et là surprise, je ne l'ai pas avec la même valeur.
Avec ton test j'obtiens : E282AC
Avec ma valeur fichier j'obtiens : C280

Et forcément çà cloche. Ce que je ne comprends pas c'est comment j'arrive à stocker cette valeur. Je ne me suis jamais aperçu de rien, le programme de saisie (interface Web), affichant bien l'euro. Il y a donc une conversion en entrée et sortie (programmes utilisant CGIDEV2) que je n'ai pas repérée, il faut que je trouve où.
m4k-Hurrican est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 17h56   #5
Membre régulier
 
Inscription : octobre 2006
Messages : 111
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 111
Points : 92
Points : 92
Voilà c'est fixé.
Mon serveur Web n'avait pas la directive DefaultNetCCSID définie, et par conséquent récupérais des données dans la valeur du client par défaut soit 819.
Je l'ai passé à DefaultNetCCSID=1208 et là tout fonctionne.

Reste à reconvertir les anciennes données qui sont incorrectes, et çà c'est une autre paire de manche, je ne sais pas trop encore comment je vais faire.

Merci pour m'avoir donné l'idée de regarder la valeur hex, j'aurais pu tourner en rond encore longtemps.
m4k-Hurrican est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 19h53   #6
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
Content que tu es pu résoudre ton problème.

Citation:
Envoyé par m4k-Hurrican Voir le message
Reste à reconvertir les anciennes données qui sont incorrectes, et çà c'est une autre paire de manche, je ne sais pas trop encore comment je vais faire.
Généralement, une simple requête SQL suffit pour remplacer des caractères dans une colonne. Si tu veux un coup de main, n'hésite pas.
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h59.


 
 
 
 
Partenaires

Hébergement Web