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;
}