首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于宽字符的一个古怪的有关问题.

2012-02-21 
关于宽字符的一个古怪的问题......最近一直在玩Lua,前几天注意到Luaplus提供了宽字符的支持,就用了一下,结

关于宽字符的一个古怪的问题......
最近一直在玩Lua,前几天注意到Luaplus提供了宽字符的支持,就用了一下,结果遇上一个古怪的问题,我不太清楚究竟是VS的问题,还是Luaplus的问题。所以发上来大家讨论下
首先是C++代码,很简单
void   Say(const   TCHAR*   szText)
{
        std::wcout   < <   szText   < <   std::endl;
}
我将这个函数注册给lua,然后在脚本中调用,lua脚本是这样的
function   Run()
        text   =   L "你好,世界! "
        Say(text)
end
我执行一遍,一切正常,控制台窗口中正常显示出了“你好,世界!”,这个时候我想着把它转成普通的char*,问题就出来了,代码是这样
void   Say(const   TCHAR*   szText)
{
        std::wcout   < <   szText   < <   std::endl;

        char   szBuff[512]   =   {0};
        WideCharToMultiByte(CP_ACP,NULL,szText,_tcslen(szText),szBuff,512,NULL,FALSE);

        std::cout   < <   szBuff   < <   std::endl;
}

结果输出居然是乱码...   显示成了 "??o?,êà??! "
这时我发现最开始的宽字符串szText在VS的监视窗口中显示也是乱码?这让我大惑不解,如果是这个字符串传进来就错掉了,为什么std::wcout还能正常输出呢?


[解决办法]
不是代码问题,其结症在于所定制的操作系统.如果我们定制的操作系统默认语言不是中文,也会出现这种情况.由于标准的SDK默认语言为英文,所以肯定会出现这个问题.而这个问题的解决,不能在简单地更改控制面板的 "区域选项 "的 "默认语言 ",而是要在系统定制的时候,选择默认语言为 "中文 ".
系统定制时选择默认语言的位置于:
Platform -> Setting... -> locale -> default language ,选择 "中文 ",然后编译即可.

[解决办法]
需要字符集才能显示字符的
我们的系统默认是用的GB2312, 如果你的不是的话, 显示出来的应该就是乱码
[解决办法]
hello world 不是你好世界的意思, 是大家好.
[解决办法]
?
[解决办法]
mark,学习
[解决办法]
mark
[解决办法]
把 CP_ACP 替换成936试试。
[解决办法]
对于神秘的wcout,好象跟具体的STL库实现有关.先不管它.
IDE环境的DEBUG监视窗口也不要管它.

在控制台窗口标题栏,右键菜单 '属性 '里查看这个控制台使用的代码页.

[解决办法]
你定义了UNICODE了么?
如果没有定义UNICODE, szText就不是widechar了,转换当然有问题...........
TCHAR不代表就是widechar............

热点排行