Помогите мне, выбрасывая исключение ошибки при декодировании кода.нужна помощь - PullRequest
0 голосов
/ 19 августа 2011
To encode a string

Code:
public string base64Encode(string data)
{
    try
    {
        byte[] encData_byte = new byte[data.Length];
        encData_byte = System.Text.Encoding.UTF8.GetBytes(data);    
        string encodedData = Convert.ToBase64String(encData_byte);
        return encodedData;
    }
    catch(Exception e)
    {
        throw new Exception("Error in base64Encode" + e.Message);
    }
}
and to decode

Code:
public string base64Decode(string data)
{
    try
    {
        System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();  
        System.Text.Decoder utf8Decode = encoder.GetDecoder();

        byte[] todecode_byte = Convert.FromBase64String(data);
        int charCount = utf8Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);    
        char[] decoded_char = new char[charCount];
        utf8Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);                   
        string result = new String(decoded_char);
        return result;
    }
    catch(Exception e)
    {
        throw new Exception("Error in base64Decode" + e.Message);
    }
}

1 Ответ

3 голосов
/ 19 августа 2011

Вы еще не сказали, какую ошибку вы получаете, но ваш второй код должен быть просто:

return Encoding.UTF8.GetString(Convert.FromBase64String(data));
  • Вам не нужно создавать новый UTF8Encoding
  • Вам не нужно явно беспокоиться о декодерах

Кроме того, ваша обработка исключений является мерзкой - трассировка стека уже показала бы, где произошла ошибка, но просто перехватывая ее и перебрасывая Exception вы скрываете исходный тип исключения.Просто удалите блоки try / catch из обоих ваших методов.(И переименуйте их так, чтобы они соответствовали соглашениям об именах .NET.)

По сути, ваш код может выглядеть так просто:

public static string Base64AndUtf8Encode(string text)
{
    return Convert.ToBase64String(Encoding.UTF8.GetBytes(text));
}

public static string Base64AndUtf8Decode(string base64)
{
    return Encoding.UTF8.GetString(Convert.FromBase64String(base64));
}

Очевидно, вы можете разделить его на отдельные операторы, если хотитено он может быть довольно коротким:

public static string Base64AndUtf8Encode(string text)
{
    byte[] bytes = Encoding.UTF8.GetBytes(text);
    return Convert.ToBase64String(bytes);
}

public static string Base64AndUtf8Decode(string base64)
{
    bytes[] bytes = Convert.FromBase64String(base64);
    return Encoding.UTF8.GetString(bytes);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...