× 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.



Jon,

I'm receiving a SOAP XML response from the Endicia Label Server (Stamps.com) API when requesting a postage label. The response contains an element <Base64LabelImage> that contains the base64 encoded ZPLII string to produce the label (it can actually contain up to 4 label strings).

I'm using HTTPAPI to make the request and parse the response:

rc = http_post_xml(
url
: %addr(soap) + 2
: %len(soap)
: %paddr(StartOfElement)
: %paddr(EndOfElement)
: %addr(userData)
: HTTP_TIMEOUT
: *omit
: 'text/xml; charset=UTF-8; ' + GETLABELACTION
);

Inside the EndOfElement() procedure I base64_decode the value received... I'm not sure what else I would do with it??

dcl-s base64encoded varchar(65535) inz;
dcl-s base64decoded char(65535) inz;
dcl-s len uns(10) inz;

when name = 'Base64LabelImage';
base64Encoded = value;
len = base64_decode( %addr(base64Encoded:*data)
: %len(%trim(base64Encoded))
: %addr(base64Decoded)
: %size(base64Decoded)
);
GetLabelResponse.label(1) = %subst(base64Decoded:1:len);

I then write the label(s) data to IFS files before sending them directly to the appropriate Zebra Printer.
For x = 1 to labelCount;
labelFd = open(labelFile(x):flag:mode:1208:0); // Label is UTF8 per Endicia Label Server Support
Ifs_Write(labelFd:GetLabelResponse.label(x));
Ifs_CloseFile(labelFd);
Endfor;

This is working flawlessly.

For one particular process we do, I need to add text data to the END of the label... I want to do this just before I write the label to the IFS file.

To do this:
1. I scan the label data for '^XZ' (end of label)
2. I replace with ''
3. I add my string of ZPLII (generated by another service program) and '^XZ' (end of label)

The issue I'm encountering:

I'm not "Finding" the '^XZ' when I scan GetLabelResponse.label(x).
When I display the variable in debug, it looks nothing like the data written to the IFS - I can't "see" the '^XZ' (or any ZPLII characters). But when I write it to the IFS, it appears perfect in Notepad and it prints perfectly.

Things I've tried:
Place the label data into a variable with CCSID(1252) I can scan and find the string and manipulate it in RPG, but then I can't seem to write it to the IFS correctly.
Place the label data into a variable with CCSID(1208) I receive An error occurred during conversion from CCSID(1208) to CCSID(937)
*This particular label contains the superscript "TM" symbol

Maybe I'm still doing something wrong??
I'm at a loss.

Greg


-----Original Message-----
From: RPG400-L [mailto:rpg400-l-bounces@xxxxxxxxxxxxxxxxxx] On Behalf Of Jon Paris
Sent: Monday, August 17, 2020 4:55 PM
To: RPG programming on IBM i <rpg400-l@xxxxxxxxxxxxxxxxxx>
Subject: Re: Manipulating a decoded UTF8 string

Can you show us what you were trying?

Hex or Char would make no difference - which indicates that your character version is wrongly coded.

%Scan ( X'F1' : xxxxx ) will produce the same result as %Scan ( char : xxxxx ) where "char" has the value X'F1'.

I also don't see why you need to "decoding the string into an RPG variable" - past experience should have shown you by now that therein lie problems <grin>

If %Scan can find the string then %ScanRpl will find the string and replace it for you.



On Aug 17, 2020, at 4:44 PM, Greg Wilburn <gwilburn@xxxxxxxxxxxxxxxxxxxxxxx> wrote:

So in another thread I got some help using base64_decode to decode an XML element and write that to the IFS specifying CCSID (1208).

They data is a ZPLII label string. I need to scan for value that represents the "end" of the label and replace that value with my own string BEFORE I write it to IFS.

The issue is that upon decoding the string into an RPG variable, I can't seem to find (%SCAN) find the value. If I scan for the hex equivalent I can find it. But then I'm not sure how to add my string?
Do I have to convert everything to hex to manipulate that RPG variable?

I've tried messing with CCSIDs on the RPG Variables, but didn't have much luck.

What am I missing?

Thanks,
Greg

--
This is the RPG programming on IBM i (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription related questions.

Help support midrange.com by shopping at amazon.com with our affiliate link: https://amazon.midrange.com


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 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.