我意识到这可能更像是一个一般的 java 问题,但由于它在 Notes\ Domino 环境中运行,我想我会先检查那个社区。
概括:
我似乎无法解码字符串:dABlAHMAdAA= using lotus.domino.axis.encoding.Base64 或 sun.misc.BASE64Decoder
我知道原文是:test
我在http://www5.rptea.com/base64/上通过解码确认它似乎是 UTF-16。
作为简单的测试,使用以下任一方法:
String s_base64 = "dABlAHMAdAA=";
byte[] byte_base64 = null;
String s_decoded = "";
byte_base64 = new sun.misc.BASE64Decoder().decodeBuffer(s_base64);
s_decoded = new String(byte_base64, "UTF-16");
System.out.println("Test1: " + s_decoded);
byte_base64 = lotus.domino.axis.encoding.Base64.decode(s_base64);
s_decoded = new String(byte_base64, "UTF-16");
System.out.println("Test2: " + s_decoded);
System.out.println("========= FINISH.");
我得到输出:
Test1: ????
测试2:???
如果我将字符串创建为 UTF-8
s_decoded = new String(byte_base64, "UTF-8");
它输出:
t
没有抛出错误,但它没有完成代码,没有到达“完成”。
细节
我正在访问一个 asmx Web 服务,在 SOAP 响应中,一些节点包含 base64 编码数据。在这个时间点,没有办法改变服务,所以我不得不自己进行 XPath 和解码。编码数据是文本或 html。如果我通过http://www5.rptea.com/base64/传递编码数据并选择 UTF-16,它会正确解码,所以我一定做错了什么。
作为旁注,我编码了“测试”:
s_base64 = lotus.domino.axis.encoding.Base64.encode(s_text.getBytes());
System.out.println("test1 encodes to: " + s_base64);
s_base64 = new sun.misc.BASE64Encoder().encode(s_text.getBytes());
System.out.println("test2 encodes to: " + s_base64);
它们都编码为:
dGVzdA== ...如果您随后将其输入到上面的 2 个解码器中,如预期的那样,则可以正确解码。
如果我去上面的站点,并将“测试”编码为 UTF-16,我得到: dABlAHMAdAA= 以便确认数据采用 UTF-16 格式。
就像数据是真正的 base64 数据一样,但解码器并不能识别它。我现在有点难过。
任何指示或意见将不胜感激。