登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> 程序员学前班[不再更新,只读] >> 主题: wprintf 中文乱码问题     [回主站]     [分站链接]
标题
wprintf 中文乱码问题
clq
浏览(0) + 2010-04-27 13:12:40 发表 编辑

关键字:

wprintf 中文乱码问题

    CFileFind filefind;// = new
    filefind.FindFile(_T("d:\\*.*"));

    while((filefind.FindNextFile()!=0)  )
    {
        if (filefind.IsDirectory()&& !filefind.IsDots())
        {
            CString direct = filefind.GetFileName();
            std::wstring w = direct.GetBuffer();
            ws2s(w).c_str();
            printf("%s\n", ws2s(w).c_str());

            setlocale(LC_ALL, "chs");
            wprintf(_T("%s\n"), direct);
            //wprintf(_T("%S\n"), direct);
        }
    }

关键是 setlocale(LC_ALL, "chs");

clq
2010-4-27 13:13:50 发表 编辑

C 使用wprintf,_tprintf 打印简体中文的方法 【Locale.h】
{
char* paName = "测试中";
        wchar_t* pwName = L"测试中";
       
        printf(paName); //输出为:测试中
        wprintf((wchar_t*)paName); //输出为:空
      
        printf((char*)pwName); //输出为:乱码
        wprintf(pwName); //输出为:空
    }
    如果将程序改写如下,则输出的结果就不一样了
    {
char* paName = "测试中";
        wchar_t* pwName = L"测试中";
       
       setlocale(LC_ALL, "chs");
      
        printf(paName); //输出为:测试
        wprintf((wchar_t*)paName); //输出为:空
       
        printf((char*)pwName); //输出为:乱码
        wprintf(pwName); //输出为:测试
    }
    从上面两个代码片断可以看出:setlocale()对printf()没有影响,同时对char*的字符串也没有影响。唯一受到影响的是 wprintf()这个函数了。我通过调试器查看了paName和pwName的字符,他们分别是:

       paName :b2e2 cad4 d6d0 …… 应该是CHS编码(也就是代码页936)


总数:1 页次:1/1 首页 尾页  
总数:1 页次:1/1 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1