在 RPGLE 程序中使用 SYSTOOLS.BASE64DECODE 时出现问题
Issue while using SYSTOOLS.BASE64DECODE in RPGLE program
我正在尝试使用 SYSTOOLS.BASE64DECODE 函数在 SQLRPGLE 中解码 base64 字符串。结果是一个空字符串。 base64 字符串也有 CRLF 字符。当我从 base64 字符串中省略 CRLF 时,解码工作正常。看起来与字符集有关。感谢任何帮助
示例 base64 字符串:
XlhBCl5GWCoqKioqKipBUEMgTG9nbyoqKioqKioqXkZTCl5GTzU4MCw
SQLRPGLE
Dcl-S VarcharField1 Varchar(4096) ;
Dcl-S VarcharField2 varchar(13096) inz(' ') ccsid(819);
VarcharField1 = 'XlhBCl5GWCoqKioqKipBU';
EXEC SQL SET :VarcharField2 =
SYSTOOLS.BASE64DECODE(:VarcharField1);
*InLr = *On;
在 RPG 中 运行 一个 SQL 语句之后检查 SQLSTATE
或 SQLCODE
总是一个好主意。
如果你这样做了,你就会看到,
SQLSTATE==38000-->Java™ 例程异常退出。
查看工作日志,有更多信息
Java stored procedure or user-defined function SYSTOOLS.BASE64DECODE,
specific name BASE600002 aborted with an exception "incomplete base64
string: XlhBCl5GWCoqKioqKipBU".
我记得,一个 base64 编码的字符串应该是 4 的倍数,并且必须在必要时用 '=' 填充。
但是,您提供的字符串长度为 21 个字符,这意味着 3 个无效的填充字符,您永远不需要超过 2 个。
如果您填充整个字符串而不是子字符串,它应该可以工作。
VarcharField1 = 'XlhBCl5GWCoqKioqKipBUEMgTG9nbyoqKioqKioqXkZTCl5GTzU4MCw=';
编辑
它工作得很好,因为没有抛出异常。觉得还是CCSID的问题,我一般不用SYSTOOLS.BASE64DECODE.
我正在尝试使用 SYSTOOLS.BASE64DECODE 函数在 SQLRPGLE 中解码 base64 字符串。结果是一个空字符串。 base64 字符串也有 CRLF 字符。当我从 base64 字符串中省略 CRLF 时,解码工作正常。看起来与字符集有关。感谢任何帮助
示例 base64 字符串: XlhBCl5GWCoqKioqKipBUEMgTG9nbyoqKioqKioqXkZTCl5GTzU4MCw
SQLRPGLE
Dcl-S VarcharField1 Varchar(4096) ;
Dcl-S VarcharField2 varchar(13096) inz(' ') ccsid(819);
VarcharField1 = 'XlhBCl5GWCoqKioqKipBU';
EXEC SQL SET :VarcharField2 =
SYSTOOLS.BASE64DECODE(:VarcharField1);
*InLr = *On;
在 RPG 中 运行 一个 SQL 语句之后检查 SQLSTATE
或 SQLCODE
总是一个好主意。
如果你这样做了,你就会看到,
SQLSTATE==38000-->Java™ 例程异常退出。
查看工作日志,有更多信息
Java stored procedure or user-defined function SYSTOOLS.BASE64DECODE,
specific name BASE600002 aborted with an exception "incomplete base64
string: XlhBCl5GWCoqKioqKipBU".
我记得,一个 base64 编码的字符串应该是 4 的倍数,并且必须在必要时用 '=' 填充。
但是,您提供的字符串长度为 21 个字符,这意味着 3 个无效的填充字符,您永远不需要超过 2 个。
如果您填充整个字符串而不是子字符串,它应该可以工作。
VarcharField1 = 'XlhBCl5GWCoqKioqKipBUEMgTG9nbyoqKioqKioqXkZTCl5GTzU4MCw=';
编辑
它工作得很好,因为没有抛出异常。觉得还是CCSID的问题,我一般不用SYSTOOLS.BASE64DECODE.