Я использую Convert.FromBase64String()
для декодирования базовой кодированной строки. Строка на самом деле представляет собой XML-файл, в котором в нем есть кодированные изображения с базой 64. Например.Невозможно декодировать базовую строку 64 с Convert.FromBase64String()
data:image/png;base64,iVBORw0KGgoAA...
я получаю следующее исключение:
System.FormatException: вход не является допустимым Base-64 строка, которая содержит не-базовую 64 символ, более двух символов отступов, или среди символов заполнения.
В чем проблема? Кодирование с двойной базой 64? Строка image/png;base64
в базовых 64 кодированных данных? У онлайн-инструмента нет никаких проблем.
Edit:
Теперь я попытался удалить image/png;base64
часть из файла XML, и я все еще получаю эту ошибку. Затем я попытался декодировать строку YWJj
с той же ошибкой !? Если я использую этот код
byte[] dataBuffer = Convert.FromBase64String(base64string);
Получалось исключение. Если я использую вместо этого
byte[] dataBuffer = Convert.FromBase64String("YWJj");
это действительно работа. Кодирование файла - UTF-8
в соответствии с Notepad ++. Есть идеи?
Edit 2:
String.Equals
говорит о том, что две строки YWJj
не равны, несмотря на Locals
окно показывает, что они являются:
BTW приведенный выше код не бросает исключение, потому что я использую string test = "YWJj";
. Почему он работает с локальными определенными переменными, но не с переданными строками? Я не думаю, что это проблема с потоками, потому что я сделал вышеупомянутую функцию, которая вызывается только один раз.
Не следует ли удалять 'data: image/png; base64,' part? – com2ghz
Используйте только закодированную часть данных как imput для 'Convert.FromBase64String()' – BWA
Я не могу ее удалить. Но вопрос в том, что 'Convert.FromBase64String()' не работает с такими строками ... – testing