decode base 64 [DART]

Issue

I’m new here.
I have a problem decoding my string in base64.

when I use https://www.base64decode.org/

It works perfectly, so I believe the problem is not my String
but whenever I try to dart it doesn’t work

I try to decode like this:

HtmlSac = utf8.decode (base64Url.decode (MyString))

He returns

FormatException: Missing extension byte (at offset 2451)

my String:

PCFET0NUWVBFIEhUTUw+DQoNCiANCiA8IS0tICoqKioqKioqIENSSUEgRlVOQ0FPICJOYUxpc3RhTmVncmEiIFFVRSBWRVJJRklDQSBTRSBPIENQRi9DTlBKIEVTVEEgTkEgTElTVEEgTkVHUkEgREEgUkVDRUlUQSAqKioqKioqKioqIC0tPg0KDQoNCjxodG1sPg0KCQ0KCTxoZWFkPg0KCQk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4NCgkJPHRpdGxlPlJlY2VpdGEgRmVkZXJhbCBkbyBCcmFzaWw8L3RpdGxlPg0KICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii8vd3d3LnJlY2VpdGEuZmF6ZW5kYS5nb3YuYnIvdGVtYS9jc3MvcmZiLmNzcyIvPg0KICAgICAgICA8c2NyaXB0IGRhdGEtbWFpbj0iLy93d3cucmVjZWl0YS5mYXplbmRhLmdvdi5ici90ZW1hL21haW4tYnVpbHQuanMiIHNyYz0iLy93d3cucmVjZWl0YS5mYXplbmRhLmdvdi5ici90ZW1hL3JlcXVpcmUuanMiPjwvc2NyaXB0Pg0KICAgICAgICA8c2NyaXB0IHNyYz0iLy93d3cucmVjZWl0YS5mYXplbmRhLmdvdi5ici9lc3RhdGlzdGljYS9lc3RhdGlzdGljYS5qcyI+PC9zY3JpcHQ+DQoJCQ0KCQ0KCQkNCgkJDQoJCTxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiID4NCgkJCWZ1bmN0aW9uIGFvU2FpcihldmVudG8pIHsNCgkJCQkvL2lmICh3aW5kb3cuRXZlbnQpIHsNCgkJCQkvLwlkb2N1bWVudC5jYXB0dXJlRXZlbnRzKEV2ZW50Lk1PVVNFVVApOw0KCQkJCS8vfQ0KCQkJCS8vYWxlcnQoZXZlbnRvKTsNCgkJCX0NCgkJCS8vYWxlcnQoY2FwdHVyZUV2ZW50cyhFdmVudCkpOw0KCQk8L3NjcmlwdD4NCgk8L2hlYWQ+DQoJDQoJPGJvZHkgdG9wbWFyZ2luPSIwIiBtYXJnaW53aWR0aD0iMCIgbGVmdG1hcmdpbj0iMCIgcmlnaHRtYXJnaW49IjAiIGJvdHRvbW1hcmdpbj0iMCIgbWFyZ2luaGVpZ2h0PSIwIiAgb25VbmxvYWQ9ImFvU2Fpcihkb2N1bWVudC5jYXB0dXJlRXZlbnRzKHdpbmRvdy5FdmVudCkpIj4gIA0KICAgIDxkaXYgaWQ9InJmYi1tYWluLWNvbnRhaW5lciI+DQoJPGgxPlNpdHVhJmNjZWRpbDsmYXRpbGRlO28gZGFzIERlY2xhcmEmY2NlZGlsOyZvdGlsZGU7ZXMgSVJQRiAyMDE5PC9oMT4NCgkJCTxibG9ja3F1b3RlPiANCgkJCQk8bGFiZWw+DQoJCQkJCTxiPlByZXphZG8gQ29udHJpYnVpbnRlIChDUEYgMDExLjU0Ny42MzItNjkpLDwvYj4NCgkJCQk8L2xhYmVsPiANCgkJCQk8YnI+DQoJCQkJDQoJCQkJCTxicj4NCgkJCQkJSEVSTE9OIERFIEFUQUlERSBDQU1QT1MNCgkJCTwvYmxvY2txdW90ZT4NCgkJCQ0KCQkJCTx0YWJsZSB3aWR0aD0iOTAlIiBjZWxsU3BhY2luZz0iMSIgYm9yZGVyPSIwIiBhbGlnbj0iY2VudGVyIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDQwcHg7Ij4NCgkJCQkJPHRyPg0KCQkJCQkJPHRkPg0KCQkJCQkJDQoJCQkJCQkJU3VhIGRlY2xhcmEmY2NlZGlsOyZhdGlsZGU7byBuJmF0aWxkZTtvIGNvbnN0YSBuYSBiYXNlIGRlIGRhZG9zIGRhIFJlY2VpdGEgRmVkZXJhbC48YnI+PGJyPjxicj48YnI+DQoJCQkJCQkJDQoJCQkJCQk8L3RkPg0KCQkJCQk8L3RyPg0KCQkJCTwvdGFibGU+DQoJCQkJCQkJDQoJCQk8dGFibGUgd2lkdGg9IjkwJSIgYWxpZ249ImNlbnRlciIgYm9yZGVyPSIwIj4NCgkJCQk8dHI+DQoJCQkJCTx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMzMlIj4NCgkJCQkJCTwhLS08Zm9udCBmYWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBzaXplPSIyIj4tLT4NCgkJCQkJCTxmb250IGNsYXNzPSJ0eHREYWRvc0NvbnRyaWJ1aW50ZSI+IA0KCQkJCQkJCUVtIEJyYXMmaWFjdXRlO2xpYSAtIERGDQoJCQkJCQk8L2ZvbnQ+DQoJCQkJCTwvdGQ+DQoJCQkJCTx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMzMlIj4NCgkJCQkJCTwhLS08Zm9udCBmYWNlPSJWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBzaXplPSIyIj4tLT4NCgkJCQkJCTxmb250IGNsYXNzPSJ0eHREYWRvc0NvbnRyaWJ1aW50ZSI+IA0KCQkJCQkJCTIyLzA2LzIwMjANCgkJCQkJCTwvZm9udD4NCgkJCQkJPC90ZD4NCgkJCQkJPHRkIGFsaWduPSJjZW50ZXIiPg0KCQkJCQkJPCEtLTxmb250IGZhY2U9IlZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiIHNpemU9IjIiPi0tPg0KCQkJCQkJPGZvbnQgY2xhc3M9InR4dERhZG9zQ29udHJpYnVpbnRlIj4gDQoJCQkJCQkJMTI6NDMNCgkJCQkJCTwvZm9udD4NCgkJCQkJPC90ZD4NCgkJCQk8L3RyPg0KCQkJCTx0cj4NCgkJCQkJPHRkIGNvbHNwYW49IjMiIGFsaWduPSJjZW50ZXIiPg0KCQkJCQkJPCEtLTxmb250IGZhY2U9IlZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiIHNpemU9IjIiIGNvbG9yPSIjRkZGRkZGIj4tLT4NCgkJCQkJCTxmb250IGNsYXNzPSJ2ZXJzYW94Ij4gDQoJCQkJCQkJdmVyc+NvIDAxLjIwMTgwODE1DQoJCQkJCQk8L2ZvbnQ+DQoJCQkJCTwvdGQ+DQoJCQkJPC90cj4NCgkJCTwvdGFibGU+DQoJDQoJCQk8aHIgd2lkdGg9Ijk1JSI+DQoNCgkJCQk8dGFibGUgd2lkdGg9IjkwJSIgYm9yZGVyPSIwIiBhbGlnbj0iY2VudGVyIj4NCgkJCQkJPHRyPg0KCQkJCQkJPHRkIHdpZHRoPSIzMyUiIG5vd3JhcD4mbmJzcDs8L3RkPg0KCQkJCQkJPHRkIHdpZHRoPSIzMyUiIGFsaWduPSJjZW50ZXIiPg0KCQkJCQkJCTxpbnB1dCB0eXBlPSJidXR0b24iIG5hbWU9ImJ0blZvbHRhciIgdmFsdWU9IlZvbHRhciIgb25DbGljaz0ibG9jYXRpb24uaHJlZj0nLi4vaW5kZXguYXNwJyIgY2xhc3M9ImJ0biI+DQoJCQkJCQk8L3RkPg0KCQkJCQkJPHRkIHdpZHRoPSIzMyUiIGFsaWduPSJyaWdodCI+DQoJCQkJCQkJPGEgaHJlZj0iamF2YXNjcmlwdDp3aW5kb3cucHJpbnQoKSI+PGltZyBzcmM9Imh0dHBzOi8vd3d3LnJlY2VpdGEuZmF6ZW5kYS5nb3YuYnIvaW1hZ2VzL3ByaW50ZXIuZ2lmIiBib3JkZXI9IjAiIG5hbWU9ImltcHJlc3NhbyI+PC9hPg0KCQkJCQkJPC90ZD4NCgkJCQkJPC90cj4NCgkJCQk8L3RhYmxlPg0KCQ0KCQkNCgkJPHNwYW4gY2xhc3M9IlJvZGFwZSI+DQoJCTxzcGFuIGNsYXNzPSJjb3Jwb1JvZGFwZSI+QSBSZWNlaXRhIEZlZGVyYWwgYWdyYWRlY2UgYSBzdWEgdmlzaXRhLiBQYXJhIGluZm9ybWEmY2NlZGlsOyZvdGlsZGU7ZXMgc29icmUgcG9sJmlhY3V0ZTt0aWNhIGRlIHByaXZhY2lkYWRlIGUgdXNvLCA8YSBocmVmPSJodHRwOi8vaWRnLnJlY2VpdGEuZmF6ZW5kYS5nb3YuYnIvc29icmUvcG9saXRpY2EtZGUtcHJpdmFjaWRhZGUiPmNsaXF1ZSBhcXVpPC9hPi4NCgkJPGJyPg0KCQk8YSBocmVmPSJodHRwOi8vaWRnLnJlY2VpdGEuZmF6ZW5kYS5nb3YuYnIvc29icmUvcG9saXRpY2EtZGUtcHJpdmFjaWRhZGUvYXZpc29zLzIwMTQvYXR1YWxpemUtc3VhLXBhZ2luYSI+QXR1YWxpemUgc3VhIHAmYWFjdXRlO2dpbmE8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VmVycyZhdGlsZGU7bzogdi4wMVI8L3NwYW4+DQoJCTwvc3Bhbj4NCgkgIDwvZGl2Pg0KCSAgDQoJPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+DQoJCWZ1bmN0aW9uIGphbmVsYShhYSl7DQoJCQlteXdpbmRvdyA9IHdpbmRvdy5vcGVuKGFhLCJ3bWFpbmkiLCIgc3RhdHVzPW5vLGxlZnQ9MTU1LHRvcD0zMjAsdG9vbGJhcj1ubywgbG9jYXRpb249bm8sZGlyZWN0b3JpZXM9bm8sc3RhdHVzPW5vLG1lbnViYXI9bm8sc2Nyb2xsYmFycz1ubyxyZXNpemFibGU9bm8sbWF4aW1pemVkPTAsd2lkdGg9NjMwLGhlaWdodD0xMzAiKTsNCgkJfQ0KCQ0KCQlmdW5jdGlvbiBhYnJlQ2VudHJhbGl6YWRvKGNwZikgew0KCQkJLy9sYXJndXJhIGUgYWx0dXJhIGRlc2VqYWRvcyBkYSBqYW5lbGEgKGluZm9ybWEpDQoJCQl3aW53aWR0aCA9IDYzMDsgLy8gbGFyZ3VyYSBkYSBqYW5lbGENCgkJCXdpbmhlaWdodCA9IDEzMDsgLy8gYWx0dXJhIGRhIGphbmVsYQ0KCQkJLy9wb3Np5+NvIGRhIGphbmVsYQ0KCQkJd2lubGVmdCAgPSAyMDA7IC8vIHZhbG9yIHBhZHLjbyBjYXNvIG8gYnJvd3NlciBu428gc3Vwb3J0ZSAobmFvIGFsdGVyYXIpDQoJCQl3aW50b3AgICAgPSAyMDA7IC8vIHZhbG9yIHBhZHLjbyBjYXNvIG8gYnJvd3NlciBu428gc3Vwb3J0ZSAobmFvIGFsdGVyYXIpDQoJCQlpZiAocGFyc2VJbnQobmF2aWdhdG9yLmFwcFZlcnNpb24pID49IDQpew0KCQkJCXdpbmxlZnQgPSAoc2NyZWVuLndpZHRoIC8gMikgLSAod2lud2lkdGggLyAyKTsgLy8gY2VudHJhbGl6YSBuYSBob3Jpem9udGFsDQoJCQkJd2ludG9wID0gKHNjcmVlbi5oZWlnaHQgLyAyKSAtICh3aW5oZWlnaHQgLyAyKTsgLy8gY2VudHJhbGl6YSBuYSB2ZXJpY2FsDQoJCQl9DQoJCQl3aW5kb3cub3BlbigncmVjaWJvLmFzcD9jcGY9JyArIGNwZiArICcnLCAnX2JsYW5rJywgJ3RvcD0nICsgd2ludG9wICsgJyxsZWZ0PScgKyB3aW5sZWZ0ICsgJyxoZWlnaHQ9JyArIHdpbmhlaWdodCArICcsd2lkdGg9JyArIHdpbndpZHRoKTsNCgkJfQ0KCQ0KCQlmdW5jdGlvbiBjbGljaygpew0KCQkJaWYgKGV2ZW50LmJ1dHRvbj09Mikge2FsZXJ0KCdTaXN0ZW1hIGRhIFJlY2VpdGEgRmVkZXJhbCAtIERlc2Vudm9sdmlkbyBwZWxvIFNFUlBSTycpfQ0KCQl9DQoJCWRvY3VtZW50Lm9ubW91c2Vkb3duPWNsaWNrDQoJPC9zY3JpcHQ+DQoJDQoJDQoJDQoJDQoJPC9ib2R5Pg0KPC9odG1sPg0K

Solution

Your bytes do not represent a valid UTF-8 string. It appears that they are, instead, encoded in ISO-8891-1 ("Latin-1").

Use this instead:

import 'dart:convert';

void main() {
  var x = 'PCFET0NUW~~~~~~C9odG1sPg0K';

  var decoded = latin1.decode(base64.decode(x));
  print(decoded);
}

Answered By – Richard Heap

Answer Checked By – David Marino (FlutterFixes Volunteer)

Leave a Reply

Your email address will not be published. Required fields are marked *