Tuesday, April 13, 2010

Hex Encoding Characters

Does anyone have a PeopleCode algorithm for hex encoding strings? I'm working on an escapeJSON function and would like to come up with a good way to convert unsafe characters to unicode. Here is what I've come up with, but I would like to hear other ideas:

Local JavaObject &int = GetJavaClass("java.lang.Integer");
Local string &unicode;

REM ** I hard coded the source character to A for this example;
&unicode = "\u" | Right("0000" | &int.toHexString(Code("A")), 4);

This converts "A" to \u0041. The actual Hex part is

GetJavaClass("java.lang.Integer").toHexString(Code("A"));

I don't think there is anything wrong with my solution. I am just wondering if I overlooked some PeopleCode function for displaying numbers in Hex.

8 comments:

  1. Have you considered using JSON.simple?

    http://code.google.com/p/json-simple/

    ReplyDelete
  2. @Bauke, JSON.simple is my favorite JSON library. Yes, I have considered, and do use it. I have another blog post in the works about that. I wanted to post it last night, but didn't quite get it finished.

    ReplyDelete
  3. have you ever considered PeopleSoft PET ?
    there are several algorithm like PSHexEncode and PSHexDecode ...

    ReplyDelete
  4. Yes, actually, I am familiar with PET. I use it Here. I'll have to look into that for this case.

    ReplyDelete
  5. It's probably more work than what you did, but you could do something like this natively in PeopleCode without using a Java Object:

    Function hexVal(&iH As integer) Returns string
    If &iH <= 9 Then
    Return String(&iH);
    Else
    Return String(Char(Mod(&iH, 9) + 64));
    End-If;
    End-Function;

    Function toHex(&iV As integer) Returns string
    Local integer &iH = Mod(&iV, 16);
    Local string &sResult = "";

    If &iV - &iH = 0 Then
    &sResult = hexVal(&iH);
    Else
    &sResult = toHex(Int((&iV - &iH) / 16)) | hexVal(&iH);
    End-If;

    Return &sResult;
    End-Function;

    &sHexValue = hexVal(Code("A"));


    Not super fancy, but it works. I snagged the algorithm from Wikipedia and converted it to PeopleCode.

    ReplyDelete
  6. @jarodmerle, Well done. Thank you.

    ReplyDelete
  7. You bet, your blog is great, so I figured it was about time I contribute even something of minimal value rather than being a total freeloader :). I have to respect fellow JJM's after all.

    ReplyDelete