我知道这可能更多是一个关于Java的一般性问题,但由于它在Notes\Domino环境中运行,所以我首先想请教这个社区。
概述:
我似乎无法使用lotus.domino.axis.encoding.Base64或sun.misc.BASE64Decoder解码字符串:dABlAHMAdAA=
我知道原始文本是: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.");
我得到了输出:
测试1:????
测试2:????
如果我将字符串创建为UTF-8
s_decoded = new String(byte_base64, "UTF-8");
输出结果如下:
t
没有抛出错误,但代码没有完成,没有到达“FINISH”。
详情
我正在访问一个asmx web服务,在SOAP响应中,一些节点包含base64编码的数据。此时,没有办法改变服务,所以我必须自己使用XPath和解码。编码数据可以是文本或html。如果我通过http://www5.rptea.com/base64/传递编码数据并选择UTF-16,则可以正确解码,因此我必须做错了什么。
作为附注,我编码了“test”:
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个解码器,则会按预期正确解码。
如果我转到上面的网站,并将“test”编码为UTF-16,则会得到:dABlAHMAdAA=,因此确认数据是以UTF-16格式呈现的。
就像数据是真正的base64数据一样,但解码器无法识别它。我目前有点困惑。
任何指针或评论都将不胜感激。