c #, чтобы вернуть закодированную базу 64 string [duplicate]

Вы ищете функцию setInterval , которая запускает функцию каждые x миллисекунды.

Например:

  ]  var start = new Date;  setInterval (function () {$ ('. Timer'). text ((новая дата - начало) / 1000 + «Секунды»);}, 1000);   
612
задан Kevin Driedger 31 July 2012 в 16:06
поделиться

3 ответа

Основываясь на ответах Эндрю Фокса и Cebe, я развернул их и сделал их строковыми расширениями вместо расширений Base64String.

public static class StringExtensions
{
    public static string ToBase64(this string text)
    {
        return ToBase64(text, Encoding.UTF8);
    }

    public static string ToBase64(this string text, Encoding encoding)
    {
        if (string.IsNullOrEmpty(text))
        {
            return text;
        }

        byte[] textAsBytes = encoding.GetBytes(text);
        return Convert.ToBase64String(textAsBytes);
    }

    public static bool TryParseBase64(this string text, out string decodedText)
    {
        return TryParseBase64(text, Encoding.UTF8, out decodedText);
    }

    public static bool TryParseBase64(this string text, Encoding encoding, out string decodedText)
    {
        if (string.IsNullOrEmpty(text))
        {
            decodedText = text;
            return false;
        }

        try
        {
            byte[] textAsBytes = Convert.FromBase64String(text);
            decodedText = encoding.GetString(textAsBytes);
            return true;
        }
        catch (Exception)
        {
            decodedText = null;
            return false;
        }
    }
}
1156
ответ дан Azeem 16 August 2018 в 04:51
поделиться
  • 1
    Нулевые проверки входных строк в обеих функциях и решение отлично :) – Sverrir Sigmundarson 30 March 2014 в 01:00
  • 2
    @SverrirSigmundarson: Это или сделать их методами расширения. – T.J. Crowder 30 December 2014 в 13:38
  • 3
    @SverrirSigmundarson - Зачем нужна нулевая проверка? Он не тот, который разыменовывает входную строку. Нулевые проверки должны помешать NullReferenceException в вашем собственном коде, а не в чьем-либо другом. – ken 2 February 2015 в 19:44
  • 4
    @ken И кто-то еще скажет, что «вы должны только выставлять ошибки в своем собственном коде, а не чужой», ссылаясь на принцип наименьшего удивления, приправленный «неудачей раньше»; и "правильное инкапсулирование". Иногда это означает обертывание ошибок компонентов нижнего уровня, иногда что-то другое. В этом случае я соглашусь с тем, что обертка ошибки в дерефке определенно сомнительна (плюс мы все медленно соглашаемся с тем, что нуль как концепция - это немного взломанный для начала), но мы все еще можем видеть некоторые эффекты иначе: имя параметра, указанное в исключении, может быть неверным, если оставить его непроверенным. – tne 19 August 2015 в 08:57
  • 5
    return System.Text.Encoding.UTF8.GetString (base64EncodedBytes, 0, base64EncodedBytes.Length); для windows phone 8 – steveen zoleko 9 December 2015 в 18:26

Я использую мою реализацию с некоторыми опрятными функциями:

  • использует методы расширения для класса Encoding. Обоснование заключается в том, что кому-то может потребоваться поддержка различных типов кодировок (не только UTF8).
  • Еще одно улучшение изящно с нулевым результатом для нулевой записи - оно очень полезно в реальных сценариях и поддерживает эквивалентность для X = decode (encode (X)).

Примечание. Помните, что для использования метода расширения вам необходимо (!) Импортировать пространство имен с ключевым словом using (в этом случае using MyApplication.Helpers.Encoding).

Код:

namespace MyApplication.Helpers.Encoding
{
    public static class EncodingForBase64
    {
        public static string EncodeBase64(this System.Text.Encoding encoding, string text)
        {
            if (text == null)
            {
                return null;
            }

            byte[] textAsBytes = encoding.GetBytes(text);
            return System.Convert.ToBase64String(textAsBytes);
        }

        public static string DecodeBase64(this System.Text.Encoding encoding, string encodedText)
        {
            if (encodedText == null)
            {
                return null;
            }

            byte[] textAsBytes = System.Convert.FromBase64String(encodedText);
            return encoding.GetString(textAsBytes);
        }
    }
}

Пример использования:

using MyApplication.Helpers.Encoding; // !!!

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Test1();
            Test2();
        }

        static void Test1()
        {
            string textEncoded = System.Text.Encoding.UTF8.EncodeBase64("test1...");
            System.Diagnostics.Debug.Assert(textEncoded == "dGVzdDEuLi4=");

            string textDecoded = System.Text.Encoding.UTF8.DecodeBase64(textEncoded);
            System.Diagnostics.Debug.Assert(textDecoded == "test1...");
        }

        static void Test2()
        {
            string textEncoded = System.Text.Encoding.UTF8.EncodeBase64(null);
            System.Diagnostics.Debug.Assert(textEncoded == null);

            string textDecoded = System.Text.Encoding.UTF8.DecodeBase64(textEncoded);
            System.Diagnostics.Debug.Assert(textDecoded == null);
        }
    }
}
33
ответ дан andrew.fox 16 August 2018 в 04:51
поделиться
  • 1
    Возврат null в случае null является очень противоречивым поведением. Никакой другой .net API, который работает со строками, не делает этого. – t3chb0t 22 June 2018 в 06:10
  • 2
    @ t3chb0t не стесняйтесь приспосабливать его к вашим потребностям. Поскольку способ, который он представлен здесь, был скорректирован с нашей. Это не общедоступный API;) – andrew.fox 22 June 2018 в 09:35

Небольшое отклонение в ответе andrew.fox, так как строка для декодирования может быть неправильной строкой с кодировкой base64:

using System;

namespace Service.Support
{
    public static class Base64
    {
        public static string ToBase64(this System.Text.Encoding encoding, string text)
        {
            if (text == null)
            {
                return null;
            }

            byte[] textAsBytes = encoding.GetBytes(text);
            return Convert.ToBase64String(textAsBytes);
        }

        public static bool TryParseBase64(this System.Text.Encoding encoding, string encodedText, out string decodedText)
        {
            if (encodedText == null)
            {
                decodedText = null;
                return false;
            }

            try
            {
                byte[] textAsBytes = Convert.FromBase64String(encodedText);
                decodedText = encoding.GetString(textAsBytes);
                return true;
            }
            catch (Exception)
            {
                decodedText = null;
                return false;   
            }
        }
    }
}
19
ответ дан Cebe 16 August 2018 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: