www.pudn.com > LoadMachineCode111.rar > ChineseConvertor.cpp


#include "stdafx.h" 
#include "chineseconvertor.h"  
 
 
CChineseConvertor::CChineseConvertor(void) 
{ 
	m_pszUnknown = new char[2]; 
	m_pszUnknown[0]='?'; 
	m_pszUnknown[1]=0; 
} 
 
CChineseConvertor::~CChineseConvertor(void) 
{ 
	delete m_pszUnknown; 
} 
 
CString CChineseConvertor::Big52GBKSimplified(CString szText) 
{ 
	int nLength; 
	wchar_t *pBuffer; 
	LPSTR pResult; 
	int nResultLength; 
 
	nLength=MultiByteToWideChar(950,0,szText,szText.GetLength(),NULL,0); 
	pBuffer=new wchar_t[nLength+1]; 
	MultiByteToWideChar(950,0,(LPCTSTR)szText,szText.GetLength(),(LPWSTR)pBuffer,nLength); 
	pBuffer[nLength]=0; 
 
	nResultLength=WideCharToMultiByte(936,0,pBuffer,nLength,NULL,0,m_pszUnknown,FALSE); 
	pResult=new char[nResultLength+1]; 
	WideCharToMultiByte(936,0,(LPWSTR)pBuffer,nLength,(LPSTR)pResult,nResultLength,"?",FALSE); 
	pResult[nResultLength]=0; 
 
	return GBKTraditional2GBKSimplified(pResult); 
	 
} 
 
CString CChineseConvertor::Big52GBKTraditional(CString szText) 
{ 
	int nLength; 
	wchar_t *pBuffer; 
	LPSTR pResult; 
	int nResultLength; 
 
	nLength=MultiByteToWideChar(950,0,szText,szText.GetLength(),NULL,0); 
	pBuffer=new wchar_t[nLength+1]; 
	MultiByteToWideChar(950,0,(LPCTSTR)szText,szText.GetLength(),(LPWSTR)pBuffer,nLength); 
	pBuffer[nLength]=0; 
 
	nResultLength=WideCharToMultiByte(936,0,pBuffer,nLength,NULL,0,m_pszUnknown,FALSE); 
	pResult=new char[nResultLength+1]; 
	WideCharToMultiByte(936,0,(LPWSTR)pBuffer,nLength,(LPSTR)pResult,nResultLength,"?",FALSE); 
	pResult[nResultLength]=0; 
 
	return pResult; 
} 
 
LPTSTR CChineseConvertor::GBKTraditional2GBKSimplified(CString szTraditional) 
{ 
	LCID dwLocale; 
	WORD wLangID; 
	wLangID=MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED); 
	dwLocale=MAKELCID(wLangID,SORT_CHINESE_PRC); 
 
	int nLength; 
	char *pBuffer; 
	nLength=LCMapString(dwLocale,LCMAP_SIMPLIFIED_CHINESE,(LPCTSTR)szTraditional,szTraditional.GetLength(),NULL,0); 
	pBuffer=new char[nLength+1]; 
	pBuffer[nLength]=0; 
	LCMapString(dwLocale,LCMAP_SIMPLIFIED_CHINESE,(LPCTSTR)szTraditional,szTraditional.GetLength(),pBuffer,nLength); 
	return pBuffer; 
} 
 
CString CChineseConvertor::GBK2Big5(CString szText) 
{ 
	LPTSTR szGBKTraditional; 
	int nLength; 
	wchar_t *pBuffer; 
	LPSTR pResult; 
	int nResultLength; 
 
	szGBKTraditional=GBKSimplified2GBKTraditional(szText); 
	nLength=MultiByteToWideChar(936,0,szGBKTraditional,strlen(szGBKTraditional),NULL,0); 
	pBuffer=new wchar_t[nLength+1]; 
	MultiByteToWideChar(936,0,(LPCTSTR)szGBKTraditional,strlen(szGBKTraditional),(LPWSTR)pBuffer,nLength); 
	pBuffer[nLength]=0; 
 
	nResultLength=WideCharToMultiByte(950,0,pBuffer,nLength,NULL,0,m_pszUnknown,FALSE); 
	pResult=new char[nResultLength+1]; 
	WideCharToMultiByte(950,0,(LPWSTR)pBuffer,nLength,(LPSTR)pResult,nResultLength,"?",FALSE); 
	pResult[nResultLength]=0; 
 
	return pResult; 
} 
 
//将GBK的简体转换到GBK繁体 
LPTSTR CChineseConvertor::GBKSimplified2GBKTraditional(CString szSimplified) 
{ 
	LCID dwLocale; 
	WORD wLangID; 
	wLangID=MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED); 
	dwLocale=MAKELCID(wLangID,SORT_CHINESE_PRC); 
 
	int nLength; 
	char *pBuffer; 
	nLength=LCMapString(dwLocale,LCMAP_TRADITIONAL_CHINESE,(LPCTSTR)szSimplified,szSimplified.GetLength(),NULL,0); 
	pBuffer=new char[nLength+1]; 
	pBuffer[nLength]=0; 
	LCMapString(dwLocale,LCMAP_TRADITIONAL_CHINESE,(LPCTSTR)szSimplified,szSimplified.GetLength(),pBuffer,nLength); 
	return pBuffer; 
} 
 
// 转换到Unicode 
LPWSTR CChineseConvertor::ToUnicode(CString szSource, int nEncoding) 
{ 
	int nLength; 
	wchar_t *pBuffer; 
	int nLanguage; 
 
	//if(nEncoding==CHINESE_SIMPLIFIED) 
	//if(nEncoding==SIMPLIFIED_CHINESE ) 
	//	nLanguage=936; 
	///else 
		//if(nEncoding==CHINESE_TRADITIONAL) 
			//nLanguage=950; 
		//else 
			nLanguage= CP_ACP; 
 
	nLength=MultiByteToWideChar(nLanguage,0,szSource,szSource.GetLength(),NULL,0); 
	pBuffer=new wchar_t[nLength+1]; 
	MultiByteToWideChar(nLanguage,0,(LPCTSTR)szSource,szSource.GetLength(),(LPWSTR)pBuffer,nLength); 
	pBuffer[nLength]=0; 
 
	return pBuffer; 
} 
 
LPTSTR CChineseConvertor::ToMultiByte(LPWSTR szSource, int nEncoding) 
{ 
	int nLength; 
	char *pBuffer; 
	int nLanguage; 
 
	//if(nEncoding==CHINESE_SIMPLIFIED) 
	//	nLanguage=936; 
	//else 
	//	if(nEncoding==CHINESE_TRADITIONAL) 
	//		nLanguage=950; 
	//	else 
			nLanguage= CP_ACP; 
 
	nLength=WideCharToMultiByte(nLanguage,0,szSource,wcslen(szSource),NULL,0,m_pszUnknown,FALSE); 
 
	pBuffer=new char[nLength+1]; 
	WideCharToMultiByte(nLanguage,0,szSource,wcslen(szSource),pBuffer,nLength,m_pszUnknown,FALSE); 
	pBuffer[nLength]=0; 
 
	return pBuffer;  
 
}