最后在网上看到用encoding convertfrom identity $str来转换编码.结果确实很好,代码如下:
1
#include
"
Program.h
"
2
#include
<
tcl
/
tcl.h
>
3
#include
<
string
>
4![](/Images/OutliningIndicators/None.gif)
5
using
namespace
std;
6![](/Images/OutliningIndicators/None.gif)
7
int
main()
8![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
9
string text = "df今天的天气传说是不错的好像。df";
10
string code = "set text [encoding convertfrom identity $text] \n set ret [string range $text 1 5]";
11![](/Images/OutliningIndicators/InBlock.gif)
12
Tcl_Interp *interp = Tcl_CreateInterp();
13![](/Images/OutliningIndicators/InBlock.gif)
14
// get all encoding name
15
Tcl_GetEncodingNames(interp);
16
cout << Tcl_GetStringResult(interp) << endl;
17![](/Images/OutliningIndicators/InBlock.gif)
18
// setup parameters
19
assert(Tcl_SetVar(interp, "text", text.c_str(), TCL_GLOBAL_ONLY));
20
assert(Tcl_SetVar(interp, "ret", "", TCL_GLOBAL_ONLY));
21![](/Images/OutliningIndicators/InBlock.gif)
22
// eval script
23
Tcl_Eval(interp, code.c_str());
24![](/Images/OutliningIndicators/InBlock.gif)
25
// get result
26
char *ret;
27
ret = (char *)Tcl_GetVar(interp, "ret", TCL_GLOBAL_ONLY);
28![](/Images/OutliningIndicators/InBlock.gif)
29
cout << "ret:" << ret << endl;
30![](/Images/OutliningIndicators/InBlock.gif)
31
system("pause");
32![](/Images/OutliningIndicators/InBlock.gif)
33
Tcl_DeleteInterp(interp);
34
}
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
但当我在MFC中用的时候却又出现乱码了...太不解了...大家给帮帮忙吧:
1
UINT CHTMLVampireDlg::HttpRequestFunc(LPVOID pParam)
2![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
3
CHTMLVampireDlg *dlg = (CHTMLVampireDlg*)pParam;
4
CString url;
5
dlg->comboBox_urlList.GetWindowText(url);
6![](/Images/OutliningIndicators/InBlock.gif)
7
try
8![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
9
CInternetSession session;
10
CHttpConnection* con = new CHttpConnection(&session, url);
11
CString htmlCode, tmpStr;
12
CHttpFile* file = con->OpenRequest(CHttpConnection::HTTP_VERB_GET, "");
13
file->SendRequest();
14
while(file->ReadString(tmpStr))
15![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
16
htmlCode += tmpStr;
17
}
18![](/Images/OutliningIndicators/InBlock.gif)
19![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**////* 当网页编码为utf-8时启用如下代码 */
20
///* 转换为正确的编码类型 */
21
//char* buf = htmlCode.GetBuffer();
22
//htmlCode.ReleaseBuffer();
23
//wchar_t* wbuffer = 0;
24
//int wbufferLen = MultiByteToWideChar(CP_UTF8, 0, buf, -1, 0, 0);
25
//wbuffer = new wchar_t[wbufferLen];
26
//memset(wbuffer, 0, sizeof(wchar_t)*wbufferLen);
27
//MultiByteToWideChar(CP_UTF8, 0, buf, -1, wbuffer, wbufferLen);
28![](/Images/OutliningIndicators/InBlock.gif)
29![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**////* 将宽字符转换为ASCII */
30
//char *ascii = 0;
31
//int asciiLen = WideCharToMultiByte(CP_ACP, 0, wbuffer, -1, 0, 0, 0, 0);
32
//ascii = new char[asciiLen];
33
//memset(ascii, 0, sizeof(char)*asciiLen);
34
//WideCharToMultiByte(CP_ACP, 0, wbuffer, -1, ascii, asciiLen, 0, 0);
35
36
dlg->richEdit_htmlCode.SetWindowText(htmlCode);
37
//delete[] ascii;
38![](/Images/OutliningIndicators/InBlock.gif)
39
//delete[] wbuffer;
40![](/Images/OutliningIndicators/InBlock.gif)
41
file->Close();
42
delete file;
43
con->Close();
44
delete con;
45
session.Close();
46![](/Images/OutliningIndicators/InBlock.gif)
47
}
48
catch(CInternetException* excep)
49![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
50
CString errMsg;
51
excep->GetErrorMessage((LPTSTR)(LPCTSTR)errMsg, 0);
52
dlg->SetWindowText(url + " " + errMsg);
53
excep->ReportError();
54
excep->Delete();
55
}
56![](/Images/OutliningIndicators/InBlock.gif)
57
return 0;
58
}
59![](/Images/OutliningIndicators/None.gif)
60![](/Images/OutliningIndicators/None.gif)
61
void
CHTMLVampireDlg::OnBnClickedButtonExecute()
62![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
63
// TODO: 在此添加控件通知处理程序代码
64
CString tclcode, htmlcode;
65
this->edit_htmlCode.GetWindowText(tclcode);
66
this->richEdit_htmlCode.GetWindowText(htmlcode);
67![](/Images/OutliningIndicators/InBlock.gif)
68
69![](/Images/OutliningIndicators/InBlock.gif)
70
Tcl_Interp* interp = Tcl_CreateInterp();
71![](/Images/OutliningIndicators/InBlock.gif)
72
ASSERT(Tcl_SetVar(interp, "htmlCode", (LPCSTR)htmlcode, TCL_GLOBAL_ONLY));
73
ASSERT(Tcl_SetVar(interp, "ret", "", TCL_GLOBAL_ONLY));
74
if(Tcl_Eval(interp, (LPCTSTR)tclcode) == TCL_OK)
75![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
76
char* ret = (char*)Tcl_GetVar(interp, "ret", TCL_GLOBAL_ONLY);
77
ASSERT(ret);
78
this->richEdit_htmlCode.SetWindowText(ret);
79
}
80
else
81![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
82
AfxMessageBox(Tcl_GetStringResult(interp), 0, 0);
83
}
84![](/Images/OutliningIndicators/InBlock.gif)
85
Tcl_DeleteInterp(interp);
86
}
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
20
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/InBlock.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/InBlock.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/InBlock.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/InBlock.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
56
![](/Images/OutliningIndicators/InBlock.gif)
57
![](/Images/OutliningIndicators/InBlock.gif)
58
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
59
![](/Images/OutliningIndicators/None.gif)
60
![](/Images/OutliningIndicators/None.gif)
61
![](/Images/OutliningIndicators/None.gif)
62
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/InBlock.gif)
65
![](/Images/OutliningIndicators/InBlock.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/InBlock.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/InBlock.gif)
70
![](/Images/OutliningIndicators/InBlock.gif)
71
![](/Images/OutliningIndicators/InBlock.gif)
72
![](/Images/OutliningIndicators/InBlock.gif)
73
![](/Images/OutliningIndicators/InBlock.gif)
74
![](/Images/OutliningIndicators/InBlock.gif)
75
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
76
![](/Images/OutliningIndicators/InBlock.gif)
77
![](/Images/OutliningIndicators/InBlock.gif)
78
![](/Images/OutliningIndicators/InBlock.gif)
79
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
80
![](/Images/OutliningIndicators/InBlock.gif)
81
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
82
![](/Images/OutliningIndicators/InBlock.gif)
83
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
84
![](/Images/OutliningIndicators/InBlock.gif)
85
![](/Images/OutliningIndicators/InBlock.gif)
86
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)