分享

char 转 wchar_t 怪事求助

 quasiceo 2012-12-13
char 转 wchar_t 怪事求助 浏览:78
加入我的收藏
楼主: char 转 wchar_t 发生怪现象求助:
写如下测试代码,将char转为wchar_t,跟踪调试时查看相关变量转换正常,但在英文xp系统下面,通过ch[]转换的String始终不能正常显示,而ch_t[]可正常.
测试代码压缩上来,知道问题的朋友请指点一下,谢谢!

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  WideString wstr;
  char ch[]="这里是中文字";
  wchar_t ch_t[]=L"这里是中文字";

  wstr = ch;
  wchar_t *str_t = wstr.c_bstr();
  wchar_t str_u[200]=L"";
  wcscpy(str_u, str_t);
  mmo1->Lines->Add(str_u);
  edt1->Text = str_u;
  edt2->Text = ch_t;
}

在BCB2010编译
此帖子包含附件:smartdata_201212122343.rar 大小:6.1K
----------------------------------------------
没事到处转转
作者:
男 smartdata (smartdata) ▲▲▲▲△ -
普通会员
2012-12-12 23:09:14
1楼: 附上图片:
此帖子包含附件:
JPEG 图像
大小:22.4K
----------------------------------------------
没事到处转转
作者:
男 egust (欢迎访问 Delphi@smth.org) ▲▲▲△△ -
普通会员
2012-12-12 23:21:19
2楼: 这都是老到不能再老的问题了
非 unicode 按系统设定的非 unicode 代码页来认,中文系统默认是 GBK(GB 18030) 编码,英文操作系统默认是 EX-ASCII 编码。按照默认方式,英文系统没改非 unicode 代码页时自然按 EX-ASCII 来转换,你看到的完全是“正常”的结果,按 GBK 转换才是不正常
----------------------------------------------
cnblogs中我写的关于Delphi的blog,欢迎访问:
http://www.cnblogs.com/egust/
作者:
男 smartdata (smartdata) ▲▲▲▲△ -
普通会员
2012-12-12 23:41:14
3楼: to 2楼:
你说的没错,现在我的问题是:
wchart_t ch_t[]可正常显示在edt2中,
为什么char ch[]通过各种变换为wchar_t后却不能在eit1中正常显示.
这是啥原因?
----------------------------------------------
没事到处转转
作者:
男 bahamut8348 (leonna) ▲▲▲△△ -
普通会员
2012-12-13 9:40:04
4楼: 你不转编码当然乱码.

  char *c = "这里是中文字";
  wchar_t *wc = new wchar_t[100];
  memset( (void*)wc, 0, 100 * sizeof(*wc) );
  MultiByteToWideChar( CP_ACP, 0, c, strlen(c), wc, 100 );
  MessageBoxW( hWnd, wc, NULL, MB_OK );
  delete[] wc;
----------------------------------------------
--
作者:
男 egust (欢迎访问 Delphi@smth.org) ▲▲▲△△ -
普通会员
2012-12-13 10:21:50
5楼: CP_ACP……这不白费劲么?
----------------------------------------------
cnblogs中我写的关于Delphi的blog,欢迎访问:
http://www.cnblogs.com/egust/
作者:
男 smartdata (smartdata) ▲▲▲▲△ -
普通会员
2012-12-13 10:36:25
6楼: to 4楼 bahamut8348 (leonna)
有转换:
是通过将ch赋值给WideString wstr来进行的.
WideString wstr;
  char ch[]="这里是中文字";
  wchar_t ch_t[]=L"这里是中文字";

  wstr = ch;
  wchar_t *str_t = wstr.c_bstr();
  wchar_t str_u[200]=L"";
  wcscpy(str_u, str_t);
----------------------------------------------
没事到处转转
作者:
男 smartdata (smartdata) ▲▲▲▲△ -
普通会员
2012-12-13 10:46:34
7楼: to 5楼 egust (欢迎访问 Delphi@smth.org):
用CTRY_PRCHINA调用MultiByteToWideChar仍然没解决.
跟踪时发现ch已经转换成wchar_t,但在英文xp下面仍然不能正常显示转换后的wchar_t.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多