|
I gave this a little more thought, tested my idea, and found that it worked...
If you add:
h ccsid(*char :*jobrun)
to your program you will find that x'B5' is indeed returned.
What appears to be happening right now is that without the ccsid control specification the UCS value is being converted to the mixed-byte CCSID related to the job CCSID (which is the documented behavior). For CCSID 37 this would be CCSID 937 - Traditional Chinese. And when I use iconv() to convert the UCS value to 937 I do indeed get the DBCS section sign.
What I do not understand is why. CCSID 937 supports two code pages - 37 for SBCS, 835 for DBCS. I would have expected the section character to generate the SBCS section character. But clearly it is not, so there is "something" going on in the CCSID mapping support. I would still pursue contacting service to find out why the system is making this selection. At least now we know the question goes to the NLS team of the system (as opposed to the RPG compiler/runtime team).
In any case, your circumvention is to restrict the UCS to character conversions to strictly the CCSID active for the job. This can be done with the ccsid specification provided above.
Bruce
Bruce Vining Services
507-206-4178
--- On Tue, 11/25/08, nicolas <nfaucheux@xxxxxxxxxxx> wrote:
From: nicolas <nfaucheux@xxxxxxxxxxx>
Subject: Re: %char(ucs2)
To: rpg400-l@xxxxxxxxxxxx
Date: Tuesday, November 25, 2008, 5:00 AM
Thanks !
I'll do it.
nicolas
Bruce Vining a écrit :
I am able to replicate the problem you are seeing and can think of norational reason for the behavior you are seeing. I would recommend contacting
IBM service. There is something wrong here. For some reason you are getting
the DBCS section sign (x'446A') rather than the SBCS value. The
conversion does work properly when directly using the iconv() support, so it
does not appear to be related to the CCSID mapping support of the system.
Bruceremains
Bruce Vining Services
507-206-4178
--- On Mon, 11/24/08, nicolas <nfaucheux@xxxxxxxxxxx> wrote:
From: nicolas <nfaucheux@xxxxxxxxxxx>
Subject: %char(ucs2)
To: rpg400-l@xxxxxxxxxxxx
Date: Monday, November 24, 2008, 5:00 AM
Hi,
when i compile this code with ccsid(297) (i mean job ccsid)
and then run it with ccsid(37)
d sds sds
d status *status
d ucs s 1c inz(%ucs2('§'))
d ebc s 10a
/free
ebc = %char(ucs);
*inlr = *on;
/end-free
i get x'0E446A0F' in ebc instead of x'B5' and status
00000
this is Shift-in + something that seems a Chinese char + Shift-out
it doesn't happen with some other ccsid's I have tested
did someone already had this problem ?
did I misunderstand %char() of an ucs2 var ?
TIA.
nicolas
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.