Ваш пример кода неполон, но я могу только предположить, что DecodeString
- это функция из Soap.EncdDecd
.Учитывая это предположение, вызов DecodeString
действительно вызывает исключение, которое вы описываете.
Исключение вызвано очень распространенным заблуждением, а именно, что двоичные и текстовые данные являются взаимозаменяемыми.Когда вы вызываете DecodeString
, вы фактически запрашиваете две операции:
- Декодируйте данные base64 в двоичный файл, то есть в массив байтов.
- Интерпретируйте эти двоичные данные какТекст в кодировке UTF-8 и декодирование в собственную строку Delphi.
Первая из этих операций выполнена успешно, поскольку данные base64 являются действительными.Вторая операция завершается неудачно, поскольку двоичные данные не являются допустимым текстом в кодировке UTF-8.
Скорее всего, вы совершаете ошибочную, хотя и очень распространенную ошибку, из-за того, что хотите рассматривать двоичные данные, массив байтов, какстрока.Строка - это не то же самое, что массив байтов.
У вас есть двоичные данные, поэтому относитесь к ним так:
uses
System.NetEncoding;
var
base64: string;
bytes: TBytes;
....
base64 := 'MEIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECO9X2Lfq3EYMBBiX0/4McWT3y6hWMvOJvH5MwD22EOvPbLQ=';
bytes := TNetEncoding.Base64.DecodeStringToBytes(base64);