还是显示乱码的问题

saiyaman5 2010-12-24 05:26:15

上次我问过英文操作系统显示中文乱码问题,本来以为是字体的原因,现在估计不是了.
我做了个测试mfc程序,单文档结构,使用了CEditView类

编译选项是选unicode

char * pT = "(文字内容)";
wchar * wideT = L"(文字内容)";

放到英文系统下的测试结果如下:

pView->GetEditCtrl().SetWindowText(wideT); //正常显示


USES_CONVERSION ;
pView->GetEditCtrl().SetWindowText(A2W(pT)); //乱码


wchar_t szWide[2048];
long lLen = MultiByteToWideChar(CP_ACP,0,pT,strlen(pT),szWide,sizeof(szWide));
szWideProgID[lLen] = '\0';
pView->SetWindowText(szWide); //还是乱码



pView->GetEditCtrl().SetWindowText(CString(pT)); //乱码

pView->GetEditCtrl().SetWindowText(_bstr_(pT)); //乱码


这些测试在中文系统全部是正常的.

在英文系统中除了定义的 wchar * wideT 常量外,其它全部是乱码.

各位给些建议吧
...全文
157 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangyan_wt 2010-12-27
  • 打赏
  • 举报
回复
是的,代码页可以理解为unicode到mbcs的一个映射表,一个代码页就是一张映射表。
不过2000以后的系统,即使是英文系统,一般也都会默认装936的代码页,还包括繁体以及日韩文的代码页,大概是950,932,949
[Quote=引用 7 楼 saiyaman5 的回复:]
谢谢各位了,我把CP_ACP换成936的确可以正常转换了
据msdn介绍的,CP_ACP批示的是默认的代码页,不同的语言版本的系统默认的代码页应该是不同的.
是否可以这样理解,如果系统里没有安装936这个代码页,就没办法转换了?
[/Quote]
xiaoguailong3 2010-12-27
  • 打赏
  • 举报
回复
英文操作系统显示中文乱码问题,我遇到过,我是这么解决的:把英文版系统修改成兼容中文版软件就OK了,你在网上搜下英文版系统怎么兼容中文软件,有设置的方法,很给力!!!
saiyaman5 2010-12-27
  • 打赏
  • 举报
回复
谢谢各位了,我把CP_ACP换成936的确可以正常转换了
据msdn介绍的,CP_ACP批示的是默认的代码页,不同的语言版本的系统默认的代码页应该是不同的.
是否可以这样理解,如果系统里没有安装936这个代码页,就没办法转换了?
acaiacc 2010-12-25
  • 打赏
  • 举报
回复
操作系统98以后都是unicode写的

所以 muiltibyte 转换需要这个 codepage

确实不同的国家是不一样的
Sou2012 2010-12-24
  • 打赏
  • 举报
回复
CP_ACP的值对吗?
zhangyan_wt 2010-12-24
  • 打赏
  • 举报
回复
当然会不一样,主要原因就是CP_ACP不一样,中文系统下这个值是936,英文系统下这个值是10xx,具体不记得了。
如果是在中文系统下编译的,你把MultiByteToWideChar函数里的CP_ACP直接换成936,应该就可以了
saiyaman5 2010-12-24
  • 打赏
  • 举报
回复
什么是"单字节字符组成的unicode"

long lLen = MultiByteToWideChar(CP_ACP,0,pT,strlen(pT),szWide,sizeof(szWide));
转换的字符串和wchar_t * 定义的一样,

wchar_t * 定义成常量能正常显示,从非unicode转unicode后却不能,我不觉得两者有什么区别.

莫非在英文系统下,MultiByteToWideChar转换会不一样?

acaiacc 2010-12-24
  • 打赏
  • 举报
回复
你的意思是你想要 单字节字符组成的unicode能在其他系统正常显示是吧

long lLen = MultiByteToWideChar(CP_ACP,0,pT,strlen(pT),szWide,sizeof(szWide));
这个转换是对的
但是由于非中文的操作系统的codepage不包括这些中文,识别不出来,所以还是乱码

这种情况你可能需要安装这些codepage
在control panel的系统locale设置里面勾上中文,

否则除非直接用wchar * wideT 这种unicode字符串,单字节合成的没有可能正常显示的
saiyaman5 2010-12-24
  • 打赏
  • 举报
回复
补充一点,菜单显示的中文都是正常的

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧