首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 實作 POP3 郵件解碼:Base64 與 Quoted-Printable

     編輯:關於C語言

MIME 編碼標準

電子郵件傳輸非文字資料(圖片、附件)需經 MIME 編碼(RFC 1341/2045)。常見兩種:

  • Base64:最通用,將 3 位元組 (24 bits) 轉為 4 個 6-bit 字元,字元集 A-Z, a-z, 0-9, +, /,不足補 '='。
  • Quoted-Printable (QP):針對少量 8-bit 文字,編碼效率較低 (1:3),以 '=' 開頭加兩位十六進位表示。

Base64 演算法原理

  1. 將輸入位元流依序填入 24-bit 緩衝區,不足補 0。
  2. 切割為 4 組 6-bit 值,高位在前。
  3. 對應 64 字元表編碼。
  4. 每行限 76 字元。

C# 實作範例:Base64 編解碼

using System;

public static class Base64Util
{
    private const string Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    public static string Encode(byte[] input)
    {
        if (input == null || input.Length == 0) return string.Empty;
        return Convert.ToBase64String(input);
    }

    public static byte[] Decode(string input)
    {
        if (string.IsNullOrEmpty(input)) return Array.Empty<byte>();
        return Convert.FromBase64String(input);
    }
}

.NET 內建 Convert.ToBase64String/FromBase64String 已完整實作標準演算法,建議直接使用。

Quoted-Printable 編解碼

public static class QuotedPrintableUtil
{
    public static string Encode(string input)
    {
        // 簡易實作:將非 ASCII 字元轉為 =XX 形式
        var bytes = System.Text.Encoding.GetEncoding("Big5").GetBytes(input); // 或 UTF-8
        var sb = new System.Text.StringBuilder();
        foreach (byte b in bytes)
        {
            if (b > 127 || b == '=')
                sb.AppendFormat("={0:X2}", b);
            else
                sb.Append((char)b);
        }
        return sb.ToString();
    }

    public static string Decode(string input)
    {
        var sb = new System.Text.StringBuilder();
        for (int i = 0; i < input.Length; i++)
        {
            if (input[i] == '=' && i + 2 < input.Length)
            {
                string hex = input.Substring(i + 1, 2);
                if (byte.TryParse(hex, System.Globalization.NumberStyles.HexNumber, null, out byte b))
                {
                    sb.Append((char)b);
                    i += 2;
                    continue;
                }
            }
            sb.Append(input[i]);
        }
        return sb.ToString();
    }
}

實務建議

  • 實際專案建議使用 System.Net.Mime 或第三方庫 (MimeKit) 完整解析 MIME 訊息。
  • 注意字元編碼 (Big5/UTF-8) 與 Content-Transfer-Encoding 標頭的一致性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved