gb 2312符号化されたstringを復号する

3704 ワード


#region/* */

    ///   <summary>   
    ///       
    ///   </summary>   
    ///   <param   name="strSrc"> </param>   
    ///   <returns> </returns>   
    private string deCode(string strSrc)
    {
        int start = strSrc.IndexOf("=?GB2312?");
        if (start == -1)
        {
            start = strSrc.IndexOf("=?gb2312?");
        }
        if (start >= 0)
        {
            string strHead = strSrc.Substring(0, start);
            string strMethod = strSrc.Substring(start + 9, 1);
            strSrc = strSrc.Substring(start + 11);
            int end = strSrc.IndexOf("?=");
            if (end == -1)
            {
                end = strSrc.Length;
            }
            string strFoot = strSrc.Substring(end + 2, strSrc.Length - end - 2);
            strSrc = strSrc.Substring(0, end);
            if (strMethod == "B")
                strSrc = strHead + deCodeB64(strSrc) + strFoot;
            else
            {
                if (strMethod == "Q")
                    strSrc = strHead + QPUnEncryCode(strSrc) + strFoot;
                else
                    strSrc = strHead + strSrc + strFoot;
            }
            start = strSrc.IndexOf("=?GB2312?");
            if (start == -1)
            {
                start = strSrc.IndexOf("=?gb2312?");
            }
            if (start >= 0)
                strSrc = deCode(strSrc);
        }
        return strSrc;
    }

    /*Base64    */
    private string deCodeB64(string strSrc)
    {
        try
        {
            if (strSrc != "")
            {
                byte[] by = Convert.FromBase64String(strSrc);
                strSrc = Encoding.Default.GetString(by);
            }
        }
        catch (Exception ex)
        { return ex.ToString(); }
        return strSrc;
    }

    #region quoted-printable 

    private string QPUnEncryCode(string source)
    {
        source = source.Replace("=\r
", ""); int len = source.Length; string dest = string.Empty; int i = 0; while (i < len) { string temp = source.Substring(i, 1); if (temp == "=") { int code = Convert.ToInt32(source.Substring(i + 1, 2), 16); if (Convert.ToInt32(code.ToString(), 10) < 127) { dest += ((char)code).ToString(); i = i + 3; } else { dest += System.Text.Encoding.Default.GetString(new byte[] { Convert.ToByte(source.Substring(i + 1, 2), 16), Convert.ToByte(source.Substring(i + 4, 2), 16) }); i = i + 6; } } else { dest += temp; i++; } } return dest; } #endregion #endregion

-------------------------------------------------
メールの送受信時、添付ファイル名が中国語の場合、文字化けした原因は、送信された符号化と受信時の符号化が一致しないためである.例えば、送信時にはgb 2312で符号化する、受信時にはgb 2312の復号プログラムで復号する.