亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mime.cpp

?? 強(qiáng)大易用的郵件收發(fā)客戶端
?? CPP
字號(hào):
// Copyright (C) 1997-2002 Valeriy Ovechkin
// 
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
// 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
// Base64.cpp : implementation file
//

#include "stdafx.h"
#include "MIME.h"
#include "tools.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include "base64.h"

// see RFC 2047 <URL:http://sunsite.dk/RFC/rfc/rfc2047.html>
CString MIMEWordDecode( const CString& strInput )
{
	CString strText = strInput;

	//
	// locate character set
	//
	int iQuestionMarkPosition = strText.Find( '?' );
	if( iQuestionMarkPosition == -1 )
	{
		return strText;
	}

	CString strCharacterSet = strText.Left( iQuestionMarkPosition );
	strText = strText.Right( strText.GetLength() - iQuestionMarkPosition - 1 );
	
	//
	// locate encoding
	//
	iQuestionMarkPosition = strText.Find( '?' );
	if( iQuestionMarkPosition == -1 )
	{
		return strText;
	}
	
	CString strEncoding = strText.Left( iQuestionMarkPosition );
	strEncoding.MakeUpper();
	strText = strText.Right( strText.GetLength() - iQuestionMarkPosition - 1 );

	//
	// decode the text
	//
	if( strEncoding == "Q" )
	{
		// quoted printable
		strText = QuotedPrintableDecode( strText );
	}
	else if( strEncoding == "B" )
	{
		// base 64
		strText = Base64Decode( strText );
	}
	else
	{
		// unknown encoding
		return strText;
	}

	return strText;
}

// see RFC 2047 <URL:http://sunsite.dk/RFC/rfc/rfc2047.html>
CString MIMEStringDecode( const CString& strInput )
{
	CString strOutput;

	int iStartPosition = 0;
	while( iStartPosition < strInput.GetLength() )
	{
		int iOpeningPosition = strInput.Find( "=?", iStartPosition );

		if( iOpeningPosition == -1 )
		{
			strOutput += strInput.Mid( iStartPosition );
			break;
		}
		
		if( iOpeningPosition > iStartPosition )
		{
			strOutput += strInput.Mid( iStartPosition, iOpeningPosition - iStartPosition );
		}

		int iClosingPosition = strInput.Find( "?", iOpeningPosition + 2 );
		
		bool bFoundTerminator = false;

		if( iClosingPosition != -1 )
		{
			iClosingPosition = strInput.Find( "?", iClosingPosition + 1 );

			if( iClosingPosition != -1 )
			{
				iClosingPosition = strInput.Find( "?=", iClosingPosition + 1 );

				if( iClosingPosition != -1 )
				{
					bFoundTerminator = true;
				}
			}
		}

		if( !bFoundTerminator )
		{
			// give up
			strOutput += strInput.Mid( iStartPosition );
			break;
		}
	
		CString sEnCoded = strInput.Mid( iOpeningPosition + 2, iClosingPosition - iOpeningPosition - 2 );
		BOOL bUTF = FindIgnoreCase(sEnCoded, "utf-8?");
		BOOL bKOI = FindIgnoreCase(sEnCoded, "koi8-r?");

		CString sDecoded = MIMEWordDecode(sEnCoded);

		if (bUTF)
		{
			UTF8ToWin(sDecoded);
		}
		else if (bKOI)
		{
			KOI8ToWin(sDecoded);
		}

		strOutput += sDecoded;
		
		iStartPosition = iClosingPosition + 2;
	}

	strOutput.TrimLeft();
	strOutput.TrimRight();

	return strOutput;
}

/////////////////////////////////////////////////////////////////////////////
// QuotedPrintable

static
unsigned char DecodeQuotedPrintableValue(unsigned char c)
{
	// Note that this works only on ASCII machines.
	if ('A' <= c && c <= 'F')
		return char(c - 'A' + 10);
	if ('a' <= c && c <= 'f')
		return char(c - 'a' + 10);
	if ('0' <= c && c <= '9')
		return char(c - '0');
	
	return 0;
}

// see RFC 2045 <URL:http://sunsite.dk/RFC/rfc/rfc2045.html>
// see RFC 2047 <URL:http://sunsite.dk/RFC/rfc/rfc2047.html>
CString QuotedPrintableDecode( const CString& strInput )
{
	CString strOutput;

	int iStartPosition = 0;
	while( iStartPosition < strInput.GetLength() )
	{
		int iEqualSignPosition = strInput.Find( '=', iStartPosition );

		if( iEqualSignPosition == -1 )
		{
			strOutput += strInput.Mid( iStartPosition );
			break;
		}
		
		if( iEqualSignPosition > iStartPosition )
		{
			strOutput += strInput.Mid( iStartPosition, iEqualSignPosition - iStartPosition );
		}

		// check if we have enough (2) characters left to decode a byte
		if( strInput.GetLength() - iEqualSignPosition - 1 < 2 )
		{
			break;
		}

		strOutput +=
		(
			char(
			  (DecodeQuotedPrintableValue( strInput.GetAt( iEqualSignPosition + 1 ) ) << 4 ) | 
			  DecodeQuotedPrintableValue( strInput.GetAt( iEqualSignPosition + 2 ) ) 
			)
		);
		
		iStartPosition = iEqualSignPosition + 3;
	}

	strOutput.Replace( '_', ' ' );

	return strOutput;
}

/////////////////////////////////////////////////////////////////////////////
// Base64

static
unsigned char DecodeBase64Value(unsigned char c)
{
	// Note that this works only on ASCII machines.
	if ('A' <= c && c <= 'Z')
		return char(c - 'A');
	if ('a' <= c && c <= 'z')
		return char(c - 'a' + 26);
	if ('0' <= c && c <= '9')
		return char(c - '0' + 52);
	if (c == '+')
		return 62;
	if (c == '/')
		return 63;
	if (c == '=')
		return (unsigned char)-1;
	
	return (unsigned char)-2;
}

// see RFC 2045 <URL:http://sunsite.dk/RFC/rfc/rfc2045.html>
CString Base64Decode( const CString& strInput )
{
	CString strOutput;

	unsigned char	uchStoredChars[4];
	int		iChars = 0;

	int iLineIndex = 0;

	while(iLineIndex < strInput.GetLength() ) 
	{
		// Group together four characters for decode.
		while (iLineIndex < strInput.GetLength() && iChars < sizeof(uchStoredChars) ) 
		{
			unsigned char c = strInput.GetAt( iLineIndex++ );
			// Ignore characters that aren't BASE64 characters
            // (e.g., spaces, CRLF, etc.).
			if (DecodeBase64Value(c) != -2)
				uchStoredChars[iChars++] = c;
		}

		if (iChars == 4) 
		{
			// We've got four characters, so decode them.
			iChars = 0;

			//
			// Decode first byte.
			//
			strOutput += 
			(
				char(
				(DecodeBase64Value(uchStoredChars[0]) << 2) | 
				(DecodeBase64Value(uchStoredChars[1]) >> 4)
				)
			);

			//
			// Decode second byte.
			//
			if (uchStoredChars[2] == '=') 
				return strOutput;

			strOutput += 
			(
				char(
				(DecodeBase64Value(uchStoredChars[1]) << 4) | 
				(DecodeBase64Value(uchStoredChars[2]) >> 2)
				)
			);

			//
			// Decode third byte.
			//
			if (uchStoredChars[3] == '=') 
				return strOutput;

			strOutput += 
			(
				char(
				(DecodeBase64Value(uchStoredChars[2]) << 6) | 
				DecodeBase64Value(uchStoredChars[3])
				)
			);
		}
	}

    return strOutput;
}
/////////////////////////////////////////////////////////////////////////////

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品视频在线免费看| 五月激情六月综合| 成人高清在线视频| 国产三级精品视频| 成人久久视频在线观看| 国产精品第四页| 色婷婷激情一区二区三区| 亚洲尤物视频在线| 欧美一级艳片视频免费观看| 美腿丝袜在线亚洲一区| 久久中文娱乐网| www.66久久| 亚洲成人资源网| 精品国产免费一区二区三区四区| 狠狠v欧美v日韩v亚洲ⅴ| 国产女同性恋一区二区| 色噜噜狠狠一区二区三区果冻| 夜夜精品视频一区二区 | 欧美日韩精品专区| 奇米色一区二区| 欧美激情一二三区| 91传媒视频在线播放| 日本女优在线视频一区二区| 精品国产91亚洲一区二区三区婷婷| 成人激情图片网| 亚洲成人免费观看| 欧美极品美女视频| 欧美日韩aaa| 成年人国产精品| 天堂在线亚洲视频| 欧美经典一区二区三区| 在线精品视频免费播放| 国产精品18久久久久久vr| 亚洲色图在线视频| 久久免费精品国产久精品久久久久| 91在线无精精品入口| 青草国产精品久久久久久| 国产精品的网站| 久久久久久久久久电影| 欧美日韩精品一区视频| 99国产精品国产精品毛片| 蜜桃av噜噜一区二区三区小说| **网站欧美大片在线观看| 久久久国产午夜精品| 91精品国产综合久久久久久久| 成人三级伦理片| 麻豆成人免费电影| 亚洲国产一区二区在线播放| 欧美国产1区2区| 亚洲精品在线三区| 欧美一区二区三区免费在线看| 91麻豆国产在线观看| 色婷婷久久久久swag精品| 国产最新精品免费| 青青青伊人色综合久久| 一区二区三区在线观看国产| 国产欧美日韩激情| 2021久久国产精品不只是精品| 欧美三级蜜桃2在线观看| 91久久精品国产91性色tv| 成人禁用看黄a在线| 国产不卡视频在线观看| 激情综合网av| 免费高清在线一区| 日日摸夜夜添夜夜添精品视频| 亚洲精品视频免费看| 自拍av一区二区三区| 亚洲欧洲99久久| 国产精品久久久久久久第一福利| 久久久www成人免费毛片麻豆| 日韩美女天天操| 精品国产成人系列| 久久久亚洲精品一区二区三区| 欧美大尺度电影在线| 精品国精品国产| 久久久久久电影| 日本一区二区三区在线观看| 国产女人18毛片水真多成人如厕| 国产亚洲婷婷免费| 国产精品免费久久| 亚洲精品午夜久久久| 一区二区三区日韩欧美| 亚洲一区二区3| 亚洲福利电影网| 日本三级韩国三级欧美三级| 免费成人小视频| 国产综合色产在线精品| 福利一区在线观看| 色综合久久久久网| 欧美丰满少妇xxxxx高潮对白| 日韩一区二区在线观看| 精品国产髙清在线看国产毛片| 久久久亚洲精品一区二区三区| 国产精品视频一二| 亚洲综合久久av| 蜜臀久久99精品久久久画质超高清| 国产一区二区电影| 国产suv精品一区二区6| 91黄视频在线| 日韩一区二区免费视频| 久久久久久久精| 亚洲综合小说图片| 久久不见久久见免费视频7| 粉嫩嫩av羞羞动漫久久久| 色又黄又爽网站www久久| 欧美一级片免费看| 国产欧美日产一区| 亚洲h动漫在线| 久久国产精品露脸对白| 91网站在线播放| 日韩一级视频免费观看在线| 国产欧美日韩精品在线| 亚洲图片欧美视频| 狠狠色丁香久久婷婷综合_中| www.亚洲激情.com| 欧美一区二区网站| 中文字幕一区二区三区在线播放| 亚洲国产日韩一级| 成人黄色软件下载| 555www色欧美视频| 国产精品传媒入口麻豆| 天天免费综合色| 成人动漫中文字幕| 日韩一区二区电影| 樱桃国产成人精品视频| 国产精品一区二区在线看| 欧美综合天天夜夜久久| 国产人成亚洲第一网站在线播放| 亚洲福利视频三区| 99久久国产综合精品色伊| 欧美大片在线观看一区二区| 亚洲激情在线激情| 国产91综合网| 日韩网站在线看片你懂的| 亚洲精品中文在线观看| 大尺度一区二区| 日韩欧美一区二区视频| 亚洲bt欧美bt精品777| 91蜜桃网址入口| 亚洲国产成人私人影院tom| 久久99精品久久久久久动态图| 欧美影院精品一区| 亚洲欧美偷拍另类a∨色屁股| 国产一二三精品| 日韩一区二区三区在线| 亚洲mv在线观看| 欧美最猛性xxxxx直播| 亚洲欧美日本在线| 成人国产在线观看| 久久久激情视频| 国产麻豆91精品| 久久亚洲春色中文字幕久久久| 日本v片在线高清不卡在线观看| 欧美专区日韩专区| 亚洲欧美激情一区二区| av成人免费在线| 亚洲国产精品高清| 粉嫩蜜臀av国产精品网站| 久久精品一区四区| 国产精品888| 久久精品夜色噜噜亚洲a∨| 国模一区二区三区白浆| 久久一二三国产| 国产精品综合一区二区| 久久久久久麻豆| 国产91丝袜在线18| 国产喂奶挤奶一区二区三区| 国产精品一区2区| 国产婷婷色一区二区三区在线| 国产美女精品在线| 中文字幕成人在线观看| 成人avav影音| 亚洲靠逼com| 欧美午夜精品一区| 日本不卡高清视频| 久久久久久日产精品| 成人涩涩免费视频| 亚洲久草在线视频| 69p69国产精品| 久久99热狠狠色一区二区| 久久婷婷综合激情| 国产成人午夜电影网| 亚洲国产成人私人影院tom| 91麻豆免费看片| 午夜视频一区二区| 精品国产乱码久久久久久牛牛| 国产精品乡下勾搭老头1| 亚洲欧洲99久久| 欧美日产国产精品| 国产美女一区二区三区| 亚洲欧洲综合另类| 日韩欧美亚洲国产另类| 国产成人精品免费网站| 中文字幕一区二区三区在线不卡| 在线观看亚洲成人| 久久精品国产77777蜜臀| 欧美高清在线精品一区| 欧美日韩日本视频| 国产成人欧美日韩在线电影| 一区二区三区不卡视频|