Ввод не является допустимой строкой Base-64 - PullRequest
2 голосов
/ 10 октября 2019

Неполадка для метода FromBase64String.

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

Пробная замена - на +

var bytes = Convert.FromBase64String(id);
id = "59216167-f9c0-4b1b-b1db-1babd1209f10@ABC"

Ожидаемый результат: строка должна быть преобразована в эквивалентный 8-разрядный массив без знака.

Ответы [ 3 ]

2 голосов
/ 10 октября 2019

Это не строка в кодировке Base64. Это гид. Вы можете прочитать его в байтовом массиве, как это

var bytearray = new Guid("59216167-f9c0-4b1b-b1db-1babd1209f10").ToByteArray();
1 голос
/ 10 октября 2019

Входные данные не являются допустимой строкой Base-64

Точная причина, по которой вы получаете этот тип ошибки, заключается в том, что это недопустимая строка Base64 ,вместо этого, как уже упоминалось, это Guidне является действительным Guid для этого .

Сначала вы можете проверить, есть ли у вас даже действительная строка Base64, попытавшись преобразовать ее.

public static bool StringIsBase64(string myString)
{
   Span<byte> buffer = new Span<byte>(new byte[myString.Length]);
   return Convert.TryFromBase64String(myString, buffer , out int bytesParsed);
}

Теперьесли вы вызываете эту функцию, и она завершается успешно, мы предполагаем, что у вас есть действительная строка Base64, в противном случае произойдет ошибка преобразования.

Ваш вызов теперь может выглядеть следующим образом:

 string id = "59216167-f9c0-4b1b-b1db-1babd1209f10@ABC";
 var bytes;
 if (StringIsBase64(id))
 {
    bytes = Convert.FromBase64String(id);
 } 

Что-то еще, что я хотел бы сказать, что ни один из других ответов не адресован, это ввод , который недопустим даже для Guid . GUID - это 128-разрядное целое число (16 байт), и эта строка недопустима.

Вы действительно получите сообщение об ошибке:

Guidсодержит 32 цифры с 4 штрихами (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)

Символы @ABC в конце строки вызывают это, если они удалены, то у нас есть фактическийдействительный Guid.

0 голосов
/ 10 октября 2019

Попробуйте это поможет

    using System;
    public class Program{

    public static void Main()
    {
        Guid gg = Guid.NewGuid();
        Console.WriteLine(gg);
        string ss = Encode(gg);
        Console.WriteLine(ss);
        Console.WriteLine(Decode(ss));
    }
    public static string Encode(Guid guid)
    {
        string encoded = Convert.ToBase64String(guid.ToByteArray());
        encoded = encoded.Replace("/", "_").Replace("+", "-");
        return encoded.Substring(0, 22);
    }

    public static Guid Decode(string value)
    {
        value = value.Replace("_", "/").Replace("-", "+");
        byte[] buffer = Convert.FromBase64String(value + "==");
        return new Guid(buffer);
    }




}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...