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编译
----------------------------------------------
没事到处转转 |
作者: |
|
2012-12-12 23:09:14 |
1楼: |
附上图片:
此帖子包含附件:
 大小: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/
|
作者: |
|
2012-12-12 23:41:14 |
3楼: |
to 2楼: 你说的没错,现在我的问题是: wchart_t ch_t[]可正常显示在edt2中, 为什么char ch[]通过各种变换为wchar_t后却不能在eit1中正常显示. 这是啥原因?
----------------------------------------------
没事到处转转
|
作者: |
|
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/
|
作者: |
|
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);
----------------------------------------------
没事到处转转
|
作者: |
|
2012-12-13 10:46:34 |
7楼: |
to 5楼 egust (欢迎访问 Delphi@smth.org): 用CTRY_PRCHINA调用MultiByteToWideChar仍然没解决. 跟踪时发现ch已经转换成wchar_t,但在英文xp下面仍然不能正常显示转换后的wchar_t. |
|