×
The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.
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 no
rational 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.
Bruce
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
remains
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.