Я понимаю, что это, вероятно, больше общий вопрос о Java, но, поскольку он работает в среде Notes \ Domino, я подумал, что сначала проверю это сообщество.
Сводка:
Кажется, я не могу декодировать строку: dABlAHMAdAA=, используя lotus.domino.axis.encoding.Base64 или sun.misc.BASE64Decoder.
Я знаю, что исходный текст: тест
Я подтвердил расшифровку на 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: ????
Test2: ????
Если я создам строку как UTF-8
s_decoded = new String(byte_base64, "UTF-8");
выдает:
t
ошибка не выдается, но код не завершается, не доходит до "ФИНИША".
Подробнее
Я обращаюсь к веб-службе asmx, в ответе 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, но декодер не распознает их как таковые. Я немного в тупике в данный момент.
Любые указатели или комментарии будут с благодарностью получены.