Декодирование Base64 дает другой результат - PullRequest
1 голос
/ 01 декабря 2011

Я работаю над небольшим проектом Streamserve (google it: P), где я получаю некоторый контент в кодировке Base64. Я попытался декодировать строку base64 с помощью нескольких декодеров, и все они возвращают правильный результат ... за исключением метода Base64DecodeString в Streamserve.

Закодированная строка: 'VABlAHMAdABpAG4AZwAgAGIAYQBzAGUANgA0AA ==' Ожидаемый результат: 'Проверка base64'

Однако в Streamserve результат: 'Tsig ae4'

Он просто пропускает все остальные буквы. Теперь я знаю, что большинство людей не знают Streamserve, но у меня есть догадка, что это может быть проблема с кодировкой символов ... проблема, и я надеялся, что кто-то знает, что здесь может происходить.

Я могу без проблем кодировать / декодировать строки в streamserve .. просто не строки, которые я получаю в качестве ввода

Ответы [ 2 ]

6 голосов
/ 01 декабря 2011

Проблема в том, что вы кодируете в UTF-16 и декодируете обратно в ASCII или UTF8.Измените кодировку строки на UTF8, прежде чем кодировать строку в base64, и она должна работать нормально.

Вот шестнадцатеричный дамп этого двоичного объекта base64:

54 00 65 00 73 00 74 00 69 00 6e 00 67 00 20 00 62 00 61 00 73 00 65 00 36 00 34 00

Если вы удалите нулевые байты, выполучить это:

54 65 73 74 69 6e 67 20 62 61 73 65 36 34

Что означает следующий текст ASCII:

Testing base64
4 голосов
/ 01 декабря 2011

Результатом декодирования base64 является двоичные данные (и аналогично входные данные при кодировании это двоичные данные). Чтобы перейти от двоичных данных к строке или наоборот, вам необходимо применить кодировку , такую ​​как UTF-8 или UTF-16. Вам нужно выяснить, какую кодировку использует Streamserve, и использовать ту же кодировку при преобразовании текстовых данных в двоичные данные для начала, прежде чем кодировать их в base64.

Звучит так, как будто вы могли бы захотеть использовать UTF-16 для кодирования вашего текста для начала, хотя в этом случае я удивляюсь, что вы не просто выводите мусор ... похоже на самом деле игнорирует каждый второй байт в декодированном base64, а не принимает его за старший байт в кодовой единице UTF-16.

...