Member 11589429 Ответов: 1

Ошибка при декодировании. Входные данные не являются допустимой строкой base-64, так как они содержат неосновные 64 символа, а более двух символов заполнения


Я получаю ответ от api в формате json, который закодирован, я сохранил ответ json в таблице.Я хочу расшифровать ответ и десерилизовать его. Когда я пытаюсь расшифровать данные, получаю ошибку.

Ошибка: входные данные не являются допустимой строкой Base-64, так как они содержат неосновные 64 символа, более двух символов заполнения или недопустимый символ среди символов заполнения.

Фактический ответ в json :
data={"Id": "234", "Name": "pinky", "MobileNumber": "", "ClassName": "Class1_Physics",   "DOBTime": "1990-04-11 15:46:38", "Landline": "", "Status": "Unmarried"}


После Кодирования :
data%3D%7B%22Id%22%3A%20%22234%22%2C%20%22Name%22%3A%20%22pinky%22%2C%20%22MobileNumber%22%3A%20%22%22%2C%20%22ClassName%22%3A%20%22Class1_Physics%22%2C%20%20%20%22DOBTime%22%3A%20%221990-04-11%2015%3A46%3A38%22%2C%20%22Landline%22%3A%20%22%22%2C%20%22Status%22%3A%20%22Unmarried%22%7D%0A


Я воспользовался помощью одного из инструментов для декодирования . Код: / / выборка ответа, который был сохранен в базе данных и присвоение строке с именем 'Name'

string base64Decoded, base64Decoded2;
                base64Decoded = Name.Trim();
            base64Decoded = base64Decoded.Replace('-', '+');
            base64Decoded = base64Decoded.Replace('_', '/');
            base64Decoded = base64Decoded.Replace('=', '/');
            base64Decoded = base64Decoded.Replace(':', '/');
            byte[] data2 = System.Convert.FromBase64String(base64Decoded);
            base64Decoded2 = System.Text.ASCIIEncoding.ASCII.GetString(data2);


Getting error at this line :

byte[] data2 = System.Convert.FromBase64String(base64Decoded);


Что я уже пробовал:

string base64Decoded, base64Decoded2;
                base64Decoded = Name.Trim();
            base64Decoded = base64Decoded.Replace('-', '+');
            base64Decoded = base64Decoded.Replace('_', '/');
            base64Decoded = base64Decoded.Replace('=', '/');
            base64Decoded = base64Decoded.Replace(':', '/');
            byte[] data2 = System.Convert.FromBase64String(base64Decoded);
            base64Decoded2 = System.Text.ASCIIEncoding.ASCII.GetString(data2);

Peter_in_2780

Строка, которую вы показываете как "после кодирования", закодирована *не* base64. Он просто имеет все не буквенно-цифровые %-шестнадцатеричные кодировки, вроде как URLencoded, но даже не это.

Member 11589429

Да, я решил эту проблему с помощью HttpUtility.UrlDecode (base64Decoded)

1 Ответов

Рейтинг:
0

Patrice T

Цитата:
Ошибка при декодировании. Входные данные не являются допустимой строкой base-64, так как они содержат неосновные 64 символа, а более двух символов заполнения

Сообщение говорит вам все, вы получаете сообщение об ошибке, потому что ваш ввод не закодирован в base64.
Просто сравните закодированные данные с декодированными, если вы посмотрите внимательно, некоторые части закодированы, а другие нет.
data=  {  "  Id"  :     "  234"  ,     "  Name"  :     "  pinky"  ...
data%3D%7B%22Id%22%3A%20%22234%22%2C%20%22Name%22%3A%20%22pinky%22...

вы просто должны заменить одни другими.