我的头文件和库文件都是从编译TCLSH84里提取出来的,但嵌入到C++中后可选择的编码类型就剩下utf-8 identity unicode这三个了,但TCLSH84.exe里却有很多.因为编码不同,处理中文的时候就得转换,查了下手册,里面说用Tcl_ExternalToUtf()可以完成这个功能,但试了好几次还是乱码 =.=|||  不知道是不是我用法错了(哪位有sample的话让我参考下吧).

最后在网上看到用encoding convertfrom identity $str来转换编码.结果确实很好,代码如下:

 1#include "Program.h"
 2#include <tcl/tcl.h>
 3#include <string>
 4
 5using namespace std;
 6
 7int main()
 8{
 9    string text = "df今天的天气传说是不错的好像。df";
10    string code = "set text [encoding convertfrom identity $text] \n set ret [string range $text 1 5]";
11
12    Tcl_Interp *interp = Tcl_CreateInterp();
13
14    // get all encoding name
15      Tcl_GetEncodingNames(interp);  
16    cout << Tcl_GetStringResult(interp) << endl;
17
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
22    // eval script
23    Tcl_Eval(interp, code.c_str());
24
25    // get result
26    char *ret;
27    ret = (char *)Tcl_GetVar(interp, "ret", TCL_GLOBAL_ONLY);
28
29    cout << "ret:" << ret << endl;
30
31    system("pause");
32
33    Tcl_DeleteInterp(interp);
34}

但当我在MFC中用的时候却又出现乱码了...太不解了...大家给帮帮忙吧:

 1UINT CHTMLVampireDlg::HttpRequestFunc(LPVOID pParam)
 2{
 3    CHTMLVampireDlg *dlg = (CHTMLVampireDlg*)pParam;
 4    CString url;
 5    dlg->comboBox_urlList.GetWindowText(url);
 6
 7    try
 8    {
 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        {
16            htmlCode += tmpStr;
17        }
18
19        /**////* 当网页编码为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
29        /**////* 将宽字符转换为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
39        //delete[] wbuffer;
40
41        file->Close();
42        delete file;
43        con->Close();
44        delete con;
45        session.Close();
46
47    }
48    catch(CInternetException* excep)
49    {
50        CString errMsg;
51        excep->GetErrorMessage((LPTSTR)(LPCTSTR)errMsg, 0);
52        dlg->SetWindowText(url + "  " + errMsg);
53        excep->ReportError();
54        excep->Delete();
55    }
56
57    return 0;
58}
59
60
61void CHTMLVampireDlg::OnBnClickedButtonExecute()
62{
63    // TODO: 在此添加控件通知处理程序代码
64    CString tclcode, htmlcode;
65    this->edit_htmlCode.GetWindowText(tclcode);
66    this->richEdit_htmlCode.GetWindowText(htmlcode);
67
68    
69
70    Tcl_Interp* interp = Tcl_CreateInterp();
71
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    {
76        char* ret = (char*)Tcl_GetVar(interp, "ret", TCL_GLOBAL_ONLY);
77        ASSERT(ret);
78        this->richEdit_htmlCode.SetWindowText(ret);
79    }
80    else
81    {
82        AfxMessageBox(Tcl_GetStringResult(interp), 0, 0);
83    }
84
85    Tcl_DeleteInterp(interp);
86}

转载于:https://www.cnblogs.com/Alacky/archive/2007/08/28/872102.html

[好惆怅啊]TCL编码转换的问题相关推荐

  1. c语言中二进制用什么字母表示方法,看C语言编码转换--------负数的二进制表示方法...

    今天在看C语言编码转换时,既然对负数的二进制表示有些遗忘,查了下网上的资料,他们说的是个P!误人子弟!和大家讨论了下,贴出来已备在此遗忘: 假设有一个 int 类型的数,值为5,那么,我们知道它在计算 ...

  2. python文本编码转换_Python: 转换文本编码

    最近在做周报的时候,需要把csv文本中的数据提取出来制作表格后生产图表. 在获取csv文本内容的时候,基本上都是用with open(filename, encoding ='UTF-8') as f ...

  3. Python:UTF-8编码转换成GBK编码

    2019独角兽企业重金招聘Python工程师标准>>> #!/usr/bin/env python # -*- coding:utf-8 -*- #UTF-8转换成GBK编码 #te ...

  4. php ascii转native,编码转换工具native2ascii的使用

    1,原理 Property文件中,使用的编码根据机器的设置可能是GBK或者UTF-8.而在Java中读取Property文件时使用的是Unicode编码,编码方式不同会导致中文乱码,因此需要将Prop ...

  5. java. xerces转xml_Xerces -C++遇到的xml编码转换问题

    前两天收到一个同事提交的一个疑难问题,在进行xml编码时,一些特殊的gbk编码汉字,会转换成乱码.当时大概的看了下,应该是编码转换的格式问题,怀疑为开源库的bug,给出一个简单的解决方案后就没有在关注 ...

  6. VC编写自己构造http协议数据的post上传图片类(MFC环境 带编码转换)(转)

    上次用VC写了个MFC环境下的post数据类,地址: /Html/diannaojishu/2009-10/4905858580.html 这次将这个类进行扩展,可以post图片.但这两个post所使 ...

  7. linux字符串编码转换函数,Linux C++ 字符串 编码识别、编码转换

    最近在做一个类似垂直下载的爬虫系统.下载之后有个解析模块,解析之后要求编码一致的向后传入索引,便遇到了编码转换问题. 1. 编码的识别 推荐使用 libchardet, 可以在这个页面下载,使用说明就 ...

  8. String构造方法和字符集编码转换

    2019独角兽企业重金招聘Python工程师标准>>> 声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础 ...

  9. Linux C gbk utf-8编码转换

    2019独角兽企业重金招聘Python工程师标准>>> 用linux C 下的函数调用创建中文目录.文件等,字符串的编码格式要求是utf-8格式的. 那么如果linux C下如何进行 ...

  10. Google App Engine for Java下的URL编码转换问题

    URL编码问题 此部分参考英文资料: http://www.blooberry.com/indexdot/html/topics/urlencoding.htm http://www.w3school ...

最新文章

  1. 输出类型SPER能自动删除公司间STO里的内向交货单?
  2. C语言基本入门 - 1
  3. LeetCode 86分割链表87扰乱字符串
  4. nltk英文词性标注
  5. Python模块:time模块详解(转)
  6. (7)关于margin的一些想法2.0
  7. php 实现百度坐标转换,PHP实现腾讯与百度坐标转换
  8. OpenCV中Canny边缘检测
  9. java 参数 python_java可变参数
  10. 《编译原理》一道关于逆波兰式的作业题(学委推导出了逆波兰式的数学公式表示)
  11. php der格式 证书,php读取der格式证书乱码解决方法_PHP教程
  12. elasticsearch 数据类型_ElasticSearch学习笔记
  13. Android: Android源码下载方法详解
  14. php钱兆楼,PHP动态网站开发实例教程(第2版)
  15. 远程监控有效保护家庭安全
  16. 毫米和像素怎么换算_将mm换算为px (毫米换算为像素)
  17. CSDN莫名其妙封号
  18. 浅谈作为一名软件开发,应该学什么、怎么学、怎样更好的提高自己?
  19. html div父集子集,怎么让父极元素的宽度自动设为所有子集的宽度之和呢?或者怎么保证子集不换行?不考虑用js!...
  20. “国防七子”经费暴增,清华足足362亿元,甩第二名101亿 |全国高校2022预算大公开...

热门文章

  1. linux中级之HAProxy基础配置
  2. 【算法】经典的ML算法(后续结合工作实践完善心得)
  3. apache nginx 区别
  4. JavaScript基本数据类型
  5. TP框架控制器的空操作
  6. iOS常用第三方类库 Xcode插件
  7. Remove_if 删除vector数据
  8. Android Eclipse 处理重构“AndroidPackageNameRefactoring”时捕获到异常
  9. android app运行显示两个图标
  10. 程序员之路:python3+PyQt5+pycharm桌面GUI开发