void CDetectCodeDlg::OnButton1()
{
// TODO: Add your control notification handler code here
::CoInitializeEx(NULL,COINIT_MULTITHREADED); // init COM
IMultiLanguage2* pIMultiLanguage2 = NULL;
HRESULT hr = S_OK;
hr = CoCreateInstance(CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER, IID_IMultiLanguage2, (void**)&pIMultiLanguage2);
if (hr == S_OK)
{
DetectEncodingInfo encoding[10];
CFile file;
if (!file.Open(_T("5.txt"),CFile::modeRead | CFile::shareDenyNone, NULL))
{
return ;
}
int nFileLen = (int)file.GetLength();
// char *pBuf = new char[nFileLen];
char *pBuf = new char[nFileLen+1];
memset(pBuf, 0, nFileLen +1);
// memset(pBuf, 0, nFileLen );
file.SeekToBegin();
file.Read(pBuf,nFileLen);
file.Close();
// char* str1="中华人民共和国万岁";
char* str1=pBuf;
int nScores = 10;
int nBufLen = strlen(str1);
// int nBufLen = 266465;
memset(encoding, 0, sizeof(DetectEncodingInfo)*10);
hr = pIMultiLanguage2->DetectInputCodepage(MLDETECTCP_NONE, 0, str1, &nBufLen, encoding, &nScores);
if (hr == S_OK)
{
TRACE(_T("%d,%d/n"), encoding[0].nLangID, encoding[0].nCodePage);
}
pIMultiLanguage2->Release();
delete []pBuf;
}
::CoUninitialize();
}
PC上运行正常.WINCE上如果是Imultilanguage2创建失败,需要在image中添加Internet Explorer Multiple-Language Full API组件. 但是在wince上在执行DetectInputCodePage时仍是不正常的,除了中文会返回932,英文及其它语言的都会返回65001(UTF-8),而西里尔文会直接返回 E_FAIL,执行失败.在WINCE上应该是缺少正确的支持.