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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? stdiofileex.cpp

?? Encode/Decode UTF-8 format from/to text format
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
			{
				int	nChars = lstrlen(lpsz) + 1;	 // Why plus 1? Because yes

				pszUnicodeString	= new wchar_t[nChars]; 

				// Initialise to something safe
				memset(pszUnicodeString, 0, sizeof(wchar_t) * nChars);
				
				// Convert to Unicode using the locale code page (the code page we are using in memory)
				nChars = GetUnicodeStringFromMultiByteString((LPCSTR)(const char*)lpsz, pszUnicodeString, nChars, nLocaleCodePage);

				// Convert back to multibyte using the file code page
				// (Note that you can't reliably read a non-Unicode file written in code page A on a system using a code page B,
				// modify the file and write it back using code page A, unless you disable all this double-conversion code.
				// In effect, you have to choose between a mangled character display and mangled file writing).
				if (nChars > 0)
				{
					// Calculate how much we need for the MB buffer (it might be larger)
					nChars = GetRequiredMultiByteLengthForUnicodeString(pszUnicodeString, m_nFileCodePage);

					pszMultiByteString= new char[nChars];  
					memset(pszMultiByteString, 0, sizeof(char) * nChars);

					nChars = GetMultiByteStringFromUnicodeString(pszUnicodeString, pszMultiByteString, nChars, m_nFileCodePage);

					// Do byte-mode write. This avoids annoying "interpretation" of \n's as \r\n
					CFile::Write((const void*)pszMultiByteString, nChars * sizeof(char));
				}
			}
			else
			{
				// Do byte-mode write. This avoids annoying "interpretation" of \n's as \r\n
				CFile::Write((const void*)lpsz, lstrlen(lpsz)*sizeof(char));
			}
		}

#endif
	}
	// Ensure we always clean up
	catch(...)
	{
		if (pszUnicodeString)	delete [] pszUnicodeString;
		if (pszMultiByteString)	delete [] pszMultiByteString;
		throw;
	}

	if (pszUnicodeString)	delete [] pszUnicodeString;
	if (pszMultiByteString)	delete [] pszMultiByteString;
}

UINT CStdioFileEx::ProcessFlags(const CString& sFilePath, UINT& nOpenFlags)
{
	m_bIsUnicodeText = false;

	// If we have writeUnicode we must have write or writeRead as well
#ifdef _DEBUG
	if (nOpenFlags & CStdioFileEx::modeWriteUnicode)
	{
		ASSERT(nOpenFlags & CFile::modeWrite || nOpenFlags & CFile::modeReadWrite);
	}
#endif

	// If reading in text mode and not creating... ; fixed by Dennis Jeryd 6/8/03
	if (nOpenFlags & CFile::typeText && !(nOpenFlags & CFile::modeCreate) && !(nOpenFlags & CFile::modeWrite ))
	{
		m_bIsUnicodeText = IsFileUnicode(sFilePath);

		// If it's Unicode, switch to binary mode
		if (m_bIsUnicodeText)
		{
			nOpenFlags ^= CFile::typeText;
			nOpenFlags |= CFile::typeBinary;
		}
	}

	m_nFlags = nOpenFlags;

	return nOpenFlags;
}

// --------------------------------------------------------------------------------------------
//
//	CStdioFileEx::IsFileUnicode()
//
// --------------------------------------------------------------------------------------------
// Returns:    bool
// Parameters: const CString& sFilePath
//
// Purpose:		Determines whether a file is Unicode by reading the first character and detecting
//					whether it's the Unicode byte marker.
// Notes:		None.
// Exceptions:	None.
//
/*static*/ bool CStdioFileEx::IsFileUnicode(const CString& sFilePath)
{
	CFile				file;
	bool				bIsUnicode = false;
	wchar_t			cFirstChar;
	CFileException	exFile;

	// Open file in binary mode and read first character
	if (file.Open(sFilePath, CFile::typeBinary | CFile::modeRead, &exFile))
	{
		// If byte is Unicode byte-order marker, let's say it's Unicode
		if (file.Read(&cFirstChar, sizeof(wchar_t)) > 0 && cFirstChar == (wchar_t)nUNICODE_BOM)
		{
			bIsUnicode = true;
		}

		file.Close();
	}
	else
	{
		// Handle error here if you like
	}

	return bIsUnicode;
}

unsigned long CStdioFileEx::GetCharCount()
{
	int				nCharSize;
	unsigned long	nByteCount, nCharCount = 0;

	if (m_pStream)
	{
		// Get size of chars in file
		nCharSize = m_bIsUnicodeText ? sizeof(wchar_t): sizeof(char);

		// If Unicode, remove byte order mark from count
		nByteCount = GetLength();
		
		if (m_bIsUnicodeText)
		{
			nByteCount = nByteCount - sizeof(wchar_t);
		}

		// Calc chars
		nCharCount = (nByteCount / nCharSize);
	}

	return nCharCount;
}

// Get the current user磗 code page
UINT CStdioFileEx::GetCurrentLocaleCodePage()
{
	_TCHAR	szLocalCodePage[10];
	UINT		nLocaleCodePage = 0;
	int		nLocaleChars = ::GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_IDEFAULTANSICODEPAGE, szLocalCodePage, 10);

	// If OK
	if (nLocaleChars > 0)
	{
		nLocaleCodePage = (UINT)_ttoi(szLocalCodePage);
		ASSERT(nLocaleCodePage > 0);
	}
	else
	{
		ASSERT(false);
	}

	// O means either: no ANSI code page (Unicode-only locale?) or failed to get locale
	// In the case of Unicode-only locales, what do multibyte apps do? Answers on a postcard.
	return nLocaleCodePage;
}

// --------------------------------------------------------------------------------------------
//
//	CStdioFileEx::GetUnicodeStringFromMultiByteString()
//
// --------------------------------------------------------------------------------------------
// Returns:    int - num. of chars written (0 means error)
// Parameters: char *		szMultiByteString		(IN)		Multi-byte input string
//					wchar_t*		szUnicodeString		(OUT)		Unicode outputstring
//					int			nUnicodeBufferSize	(IN)		Size of Unicode output buffer in chars(IN)
//					UINT			nCodePage				(IN)		Code page used to perform conversion
//																			Default = -1 (Get local code page).
//
// Purpose:		Gets a Unicode string from a MultiByte string.
// Notes:		None.
// Exceptions:	None.
//
int CStdioFileEx::GetUnicodeStringFromMultiByteString(IN LPCSTR szMultiByteString, OUT wchar_t* szUnicodeString, IN int nUnicodeBufferSize, IN int nCodePage)
{
	bool		bOK = true;
	int		nCharsWritten = 0;
		
	if (szUnicodeString && szMultiByteString)
	{
		// If no code page specified, take default for system
		if (nCodePage == -1)
		{
			nCodePage = GetACP();
		}

		try 
		{
			// Zero out buffer first. NB: nUnicodeBufferSize is NUMBER OF CHARS, NOT BYTES!
			memset((void*)szUnicodeString, '\0', sizeof(wchar_t) *
				nUnicodeBufferSize);

			// When converting to UTF8, don't set any flags (see Q175392).
			nCharsWritten = MultiByteToWideChar((UINT)nCodePage,
				(nCodePage==CP_UTF8 ? 0:MB_PRECOMPOSED), // Flags
				szMultiByteString,-1,szUnicodeString,nUnicodeBufferSize);
		}
		catch(...)
		{
			TRACE(_T("Controlled exception in MultiByteToWideChar!\n"));
		}
	}

	// Now fix nCharsWritten
	if (nCharsWritten > 0)
	{
		nCharsWritten--;
	}
	
	ASSERT(nCharsWritten > 0);
	return nCharsWritten;
}

// --------------------------------------------------------------------------------------------
//
//	CStdioFileEx::GetMultiByteStringFromUnicodeString()
//
// --------------------------------------------------------------------------------------------
// Returns:    int - number of characters written. 0 means error
// Parameters: wchar_t *	szUnicodeString			(IN)	Unicode input string
//					char*			szMultiByteString			(OUT)	Multibyte output string
//					int			nMultiByteBufferSize		(IN)	Multibyte buffer size (chars)
//					UINT			nCodePage					(IN)	Code page used to perform conversion
//																			Default = -1 (Get local code page).
//
// Purpose:		Gets a MultiByte string from a Unicode string
// Notes:		Added fix by Andy Goodwin: make buffer into int.
// Exceptions:	None.
//
int CStdioFileEx::GetMultiByteStringFromUnicodeString(wchar_t * szUnicodeString, char* szMultiByteString, 
																			int nMultiByteBufferSize, int nCodePage)
{
	BOOL		bUsedDefChar	= FALSE;
	int		nCharsWritten = 0;

	// Fix by Andy Goodwin: don't do anything if buffer is 0
	if ( nMultiByteBufferSize > 0 )
	{
		if (szUnicodeString && szMultiByteString) 
		{
			// Zero out buffer first
			memset((void*)szMultiByteString, '\0', nMultiByteBufferSize);
			
			// If no code page specified, take default for system
			if (nCodePage == -1)
			{
				nCodePage = GetACP();
			}

			try 
			{
				// If writing to UTF8, flags, default char and boolean flag must be NULL
				nCharsWritten = WideCharToMultiByte((UINT)nCodePage, 
					(nCodePage==CP_UTF8 ? 0 : WC_COMPOSITECHECK | WC_SEPCHARS), // Flags
					szUnicodeString,-1, 
					szMultiByteString, 
					nMultiByteBufferSize, 
					(nCodePage==CP_UTF8 ? NULL:sDEFAULT_UNICODE_FILLER_CHAR),	// Filler char
					(nCodePage==CP_UTF8 ? NULL: &bUsedDefChar));						// Did we use filler char?

				// If no chars were written and the buffer is not 0, error!
				if (nCharsWritten == 0 && nMultiByteBufferSize > 0)
				{
					TRACE1("Error in WideCharToMultiByte: %d\n", ::GetLastError());
				}
			}
			catch(...) 
			{
				TRACE(_T("Controlled exception in WideCharToMultiByte!\n"));
			}
		} 
	}

	// Now fix nCharsWritten 
	if (nCharsWritten > 0)
	{
		nCharsWritten--;
	}
	
	return nCharsWritten;
}

//---------------------------------------------------------------------------------------------------
//
//	CStdioFileEx::GetRequiredMultiByteLengthForUnicodeString()
//
//---------------------------------------------------------------------------------------------------
// Returns:    int
// Parameters: wchar_t * szUnicodeString,int nCodePage=-1
//
// Purpose:		Obtains the multi-byte buffer size needed to accommodate a converted Unicode string.
//	Notes:		We can't assume that the buffer length is simply equal to the number of characters
//					because that wouldn't accommodate multibyte characters!
//
/*static*/ int CStdioFileEx::GetRequiredMultiByteLengthForUnicodeString(wchar_t * szUnicodeString,int nCodePage /*=-1*/)
{
	int nCharsNeeded = 0;

	try 
	{
		// If no code page specified, take default for system
		if (nCodePage == -1)
		{
			nCodePage = GetACP();
		}

		// If writing to UTF8, flags, default char and boolean flag must be NULL
		nCharsNeeded = WideCharToMultiByte((UINT)nCodePage, 
			(nCodePage==CP_UTF8 ? 0 : WC_COMPOSITECHECK | WC_SEPCHARS), // Flags
			szUnicodeString,-1, 
			NULL, 
			0,	// Calculate required buffer, please! 
			(nCodePage==CP_UTF8 ? NULL:sDEFAULT_UNICODE_FILLER_CHAR),	// Filler char
			NULL);
	}
	catch(...) 
	{
		TRACE(_T("Controlled exception in WideCharToMultiByte!\n"));
	}

	return nCharsNeeded;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美资源站| 激情成人午夜视频| 中文一区在线播放| 国产区在线观看成人精品| 精品对白一区国产伦| 精品福利一二区| 国产日韩欧美麻豆| 国产精品免费丝袜| 亚洲免费av在线| 亚洲国产精品久久人人爱| 午夜电影一区二区| 三级久久三级久久| 狠狠色狠狠色合久久伊人| 国产精品亚洲第一区在线暖暖韩国| 久久国产精品99久久久久久老狼| 日韩vs国产vs欧美| 久久先锋影音av鲁色资源| 日本高清免费不卡视频| 成人黄色小视频在线观看| 视频一区免费在线观看| 美女网站视频久久| 人妖欧美一区二区| 久久国产尿小便嘘嘘| 奇米影视7777精品一区二区| 性做久久久久久免费观看欧美| 亚洲欧美日韩一区| 亚洲精品乱码久久久久久黑人| 国产精品毛片大码女人| 欧美国产一区二区在线观看| 国产欧美日韩精品一区| 国产欧美日韩一区二区三区在线观看| 欧美成人精品高清在线播放| 欧美一二三四在线| 日韩精品一区二区三区swag| 精品日韩一区二区三区| 久久久久亚洲蜜桃| 国产精品色哟哟网站| 亚洲va欧美va天堂v国产综合| 亚洲精品伦理在线| 五月婷婷综合网| 蜜桃一区二区三区四区| 国产iv一区二区三区| 91亚洲国产成人精品一区二三| 99久久国产综合精品色伊| 欧洲人成人精品| 日韩限制级电影在线观看| 精品免费国产二区三区| 欧美激情综合五月色丁香小说| 久久久久久久国产精品影院| 国产日韩在线不卡| 亚洲国产精品天堂| 国产在线精品不卡| 色综合天天性综合| 欧美一区三区四区| 中文字幕乱码亚洲精品一区| 一区二区三区高清在线| 蜜臀av国产精品久久久久| 国产精品一区二区你懂的| 99久久夜色精品国产网站| 精品视频999| 日韩你懂的在线播放| 亚洲精品乱码久久久久久日本蜜臀| 午夜久久久久久| 成人中文字幕在线| 中文字幕精品一区| 日韩av中文在线观看| 国产91精品久久久久久久网曝门| 欧美日韩中文字幕一区二区| 久久久久国产一区二区三区四区| 一区二区三区精品久久久| 国产一区二区三区黄视频| 欧美自拍偷拍一区| 国产精品国产三级国产a| 久久er精品视频| 欧洲一区二区av| 中文在线免费一区三区高中清不卡| 天天操天天干天天综合网| 成人免费视频免费观看| 日韩三级电影网址| 污片在线观看一区二区 | 午夜精品视频在线观看| 丁香六月综合激情| 精品少妇一区二区三区免费观看| 亚洲精品国产无天堂网2021 | 成人深夜在线观看| 日韩精品中午字幕| 亚洲mv大片欧洲mv大片精品| 国产乱码字幕精品高清av| 欧美午夜不卡在线观看免费| 日本一区二区视频在线观看| 免费在线一区观看| 久久综合色综合88| 国内精品第一页| 欧美大尺度电影在线| 亚洲丝袜另类动漫二区| 成人国产精品视频| 国产精品网站在线播放| 国产黄色精品视频| 国产亚洲精久久久久久| 黑人巨大精品欧美黑白配亚洲| 91.麻豆视频| 日本成人中文字幕| 欧美成人video| 久久99久久99| 日韩欧美中文字幕一区| 国产在线视视频有精品| 色综合中文字幕国产| 亚洲美女一区二区三区| 一本大道久久a久久精二百| 亚洲人成网站在线| 欧美色图在线观看| 日韩一区精品视频| 国产精品国产三级国产有无不卡 | 国产亚洲午夜高清国产拍精品| 免播放器亚洲一区| 欧美电影精品一区二区| 日韩精品一区第一页| 国产精品久99| 在线视频欧美精品| 国产一区二区不卡| 最新高清无码专区| 久久综合九色综合97婷婷| 欧美色手机在线观看| 成人综合婷婷国产精品久久蜜臀| 亚洲欧美日韩国产手机在线 | 国产精品人妖ts系列视频 | 伊人开心综合网| 91精品国产丝袜白色高跟鞋| 久久99久久99小草精品免视看| 亚洲精品免费在线观看| 欧美一级久久久久久久大片| 91免费国产在线观看| 午夜电影一区二区| 久久久www免费人成精品| 91久久久免费一区二区| 精品一区二区三区在线视频| 婷婷国产在线综合| 国产日韩精品一区| 欧美精品一区二区久久久| 色综合久久九月婷婷色综合| 国产麻豆91精品| 亚洲第一成年网| 亚洲人123区| 国产日韩精品一区二区三区| 欧美日韩高清在线播放| 99久久精品国产麻豆演员表| 日日摸夜夜添夜夜添国产精品| 亚洲一区二区三区激情| 国产日韩欧美一区二区三区综合| 亚洲精品一区在线观看| 日本韩国欧美一区| kk眼镜猥琐国模调教系列一区二区| 日韩av成人高清| 夜夜嗨av一区二区三区| 最新不卡av在线| 欧美国产成人在线| 久久久久国产精品麻豆ai换脸| 欧美日韩国产区一| thepron国产精品| 国产一区亚洲一区| 麻豆freexxxx性91精品| 一区二区三区中文在线观看| 国产精品区一区二区三| 欧美精品一区二区三| 欧美一区二区在线不卡| 欧美日韩高清一区二区不卡| 色综合久久综合中文综合网| 成人国产精品视频| 国产91精品精华液一区二区三区| 性做久久久久久免费观看| 天天av天天翘天天综合网色鬼国产 | 国产高清成人在线| 国产伦精品一区二区三区免费迷 | 日韩欧美卡一卡二| 日韩欧美久久一区| 欧美一二区视频| 制服丝袜在线91| 91精品国产综合久久精品性色| 欧美视频一区在线| 欧美综合欧美视频| 欧美三级午夜理伦三级中视频| 色婷婷综合久久久中文一区二区 | 久久亚洲综合色| 久久女同精品一区二区| 亚洲少妇中出一区| 亚洲精品成人悠悠色影视| 亚洲一区在线看| 亚洲国产精品久久久久秋霞影院| 亚洲欧美日韩国产一区二区三区 | 日韩电影在线一区二区| 琪琪一区二区三区| 免费成人在线影院| 亚洲一区成人在线| 爽好久久久欧美精品| 精品一区二区三区香蕉蜜桃 | 精品国产精品网麻豆系列| 久久久精品国产99久久精品芒果| 国产日韩欧美a| 亚洲与欧洲av电影| 久久精品国产**网站演员|