2016-09-26 2 views
0

Я использую 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 окно показывает, что они являются:

not equal

BTW приведенный выше код не бросает исключение, потому что я использую string test = "YWJj";. Почему он работает с локальными определенными переменными, но не с переданными строками? Я не думаю, что это проблема с потоками, потому что я сделал вышеупомянутую функцию, которая вызывается только один раз.

+0

Не следует ли удалять 'data: image/png; base64,' part? – com2ghz

+0

Используйте только закодированную часть данных как imput для 'Convert.FromBase64String()' – BWA

+0

Я не могу ее удалить. Но вопрос в том, что 'Convert.FromBase64String()' не работает с такими строками ... – testing

ответ

1

Как я уже писал, я читаю файл с кодировкой базы 64 и декодировал его с помощью Convert.FromBase64String(). Теперь я получил его работу, и причина совершенно непознаваема. Что я наделал?

Я переименовал файл. Вот и все.

Прежде чем у меня появилось имя файла, как NAME_Something_v1.0.xsl.b64. Теперь я использую NAME_Something.b64. Возможно, это не единственная причина, но я обращаюсь к файлу с сборки с assembly.GetManifestResourceStream(). Я очистил решение раньше, но у меня всегда была такая же проблема. Теперь я изменил имя обратно туда, где он был, и он также работает ...

0

1. Вы не должны включать часть data:image/png;base64,, так как это фактически не является частью строки base64.

2.iVBORw0KGgoAA... также недействителен, это не полная строка base64.

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

0

Все после data:image/png;base64, является фактической строкой Base64, подлежащей расшифровке.

Вы можете удалить первую часть строки, например, так:

ImageAsString = ImageAsString.Substring(input.IndexOf('data:image/png;base64,') + 1); 
2

Вы должны удалить data:image/png;base64, часть из строки декодирования.

strind data = "data:image/png;base64,iVBORw0KGgoAA..."; 
string[] pd = data.Split(','); 

string decoded = Convert.FromBase64String(pd[1]); 

Часть строки data:image/png;base64, не base64 данные. Реальные кодированные данные начинаются после ,. Base64 description. Таким образом, функция Convert.FromBase64String принимает только кодированные данные. Поэтому вам нужно извлечь закодированные данные.

Смежные вопросы