Декодирование Base64 дает разные результаты в Java и Ruby - PullRequest
3 голосов
/ 16 мая 2011

Я декодирую текст, используя Base64. Я пробовал три разных библиотеки (commons Base64, Java.misc., а также java.mail) на Java и все из них дают одинаковый результат для следующий текст, который не является правильным.

Однако, когда я использую Ruby для декодирования приведенной ниже строки, я получаю другой вывод. Я получаю правильный результат, используя Ruby. Код Ruby print Base64.decode64('<Below String>'), строка

RkxWAQEAAAAJAAAAABIAAK4AAAAAAAAAAgAKb25NZXRhRGF0YQgAAAAHAAV3aWR0aABAdAAAAAAA
AAAGaGVpZ2h0AEB0AAAAAAAAAAlmcmFtZXJhdGUAQBAAAAAAAAAADHZpZGVvY29kZWNpZABACAAA
AAAAAAAMY2FuU2Vla1RvRW5kAQEAD21ldGFkYXRhY3JlYXRvcgIAKVNpbXBsZUZMVldyaXRlci5h
cyB2MC44IHplcm9wb2ludG5pbmUuY29tAAAJ

Выход должен начинаться с FLV. Я не уверен, что мне не хватает, и почему выходные данные отличаются с помощью Java.

Ответы [ 3 ]

4 голосов
/ 16 мая 2011

Результатом декодирования base64 является двоичные данные .Вы не должны пытаться распечатать его так, как если бы он был текстом.

Не зная Ruby, я бы ожидал, что результатом вызова Base64.decode64 будет какой-то байтовый массив ... и это может бытьпреобразуется в текст любым количеством способов.

Посмотрите на байт того, что возвращено, чтобы выяснить, является ли это правильным.

(К сожалению, посколькуЯ вижу, что документация для Base64.decode64 дает примеры того, что именно вы делаете - рассматриваете результат операции декодирования base64 как текст. Не ясно, какой тип данных на самом деле вернулся. Такого рода вещи, почему я до сих пор люблю статически типизированные языки ...)

1 голос
/ 16 мая 2011

Вы пытаетесь распечатать в текст? это не будет работать, попробуйте использовать ByteArray для хранения декодированной строки.

Пример:

BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(encodedBytes);
0 голосов
/ 16 мая 2011

Декодированная строка фактически начинается с 'FLV':

require 'base64'
Base64.decode64('RkxWAQEAAAAJAAAAABIAAK4AAAAAAAAAAgAKb25NZXRhRGF0YQgAAAAHAAV3aWR0aABAdAAAAAAA AAAGaGVpZ2h0AEB0AAAAAAAAAAlmcmFtZXJhdGUAQBAAAAAAAAAADHZpZGVvY29kZWNpZABACAAA AAAAAAAMY2FuU2Vla1RvRW5kAQEAD21ldGFkYXRhY3JlYXRvcgIAKVNpbXBsZUZMVldyaXRlci5h cyB2MC44IHplcm9wb2ludG5pbmUuY29tAAAJ')
=> "FLV\001\001\000\000\000\t\000\000\000\000\022\000\000\256\000\000\000\000\000\000\000\002\000\nonMetaData\b\000\000\000\a\000\005width\000@t\000\000\000\000\000\000\000\006height\000@t\000\000\000\000\000\000\000\tframerate\000@\020\000\000\000\000\000\000\000\fvideocodecid\000@\b\000\000\000\000\000\000\000\fcanSeekToEnd\001\001\000\017metadatacreator\002\000)SimpleFLVWriter.as v0.8 zeropointnine.com\000\000\t"

JRuby 1.6.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...