char 轉(zhuǎn) wchar_t 怪事求助 瀏覽:78
加入我的收藏樓主: char 轉(zhuǎn) wchar_t 發(fā)生怪現(xiàn)象求助:
寫如下測試代碼,將char轉(zhuǎn)為wchar_t,跟蹤調(diào)試時查看相關(guān)變量轉(zhuǎn)換正常,但在英文xp系統(tǒng)下面,通過ch[]轉(zhuǎn)換的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
----------------------------------------------
沒事到處轉(zhuǎn)轉(zhuǎn)
作者:
(smartdata) ▲▲▲▲△ -
普通會員
2012-12-12 23:09:14
1樓: 附上圖片: 此帖子包含附件:
大小:22.4K
----------------------------------------------
沒事到處轉(zhuǎn)轉(zhuǎn)
作者:
(歡迎訪問 Delphi@smth.org) ▲▲▲△△ -
普通會員
2012-12-12 23:21:19
2樓: 這都是老到不能再老的問題了
非 unicode 按系統(tǒng)設(shè)定的非 unicode 代碼頁來認(rèn),中文系統(tǒng)默認(rèn)是 GBK(GB 18030) 編碼,英文操作系統(tǒng)默認(rèn)是 EX-ASCII 編碼。按照默認(rèn)方式,英文系統(tǒng)沒改非 unicode 代碼頁時自然按 EX-ASCII 來轉(zhuǎn)換,你看到的完全是“正?!钡慕Y(jié)果,按 GBK 轉(zhuǎn)換才是不正常
----------------------------------------------
cnblogs中我寫的關(guān)于Delphi的blog,歡迎訪問:
http://www.cnblogs.com/egust/作者:
(smartdata) ▲▲▲▲△ -
普通會員
2012-12-12 23:41:14
3樓: to 2樓:
你說的沒錯,現(xiàn)在我的問題是:
wchart_t ch_t[]可正常顯示在edt2中,
為什么char ch[]通過各種變換為wchar_t后卻不能在eit1中正常顯示.
這是啥原因?
----------------------------------------------
沒事到處轉(zhuǎn)轉(zhuǎn)
作者:
(leonna) ▲▲▲△△ -
普通會員
2012-12-13 9:40:04
4樓: 你不轉(zhuǎn)編碼當(dāng)然亂碼.
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;
----------------------------------------------
--
作者:
(歡迎訪問 Delphi@smth.org) ▲▲▲△△ -
普通會員
2012-12-13 10:21:50
5樓: CP_ACP……這不白費勁么?
----------------------------------------------
cnblogs中我寫的關(guān)于Delphi的blog,歡迎訪問:
http://www.cnblogs.com/egust/作者:
(smartdata) ▲▲▲▲△ -
普通會員
2012-12-13 10:36:25
6樓: to 4樓 bahamut8348 (leonna)
有轉(zhuǎn)換:
是通過將ch賦值給WideString wstr來進(jìn)行的.
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);
----------------------------------------------
沒事到處轉(zhuǎn)轉(zhuǎn)
作者:
(smartdata) ▲▲▲▲△ -
普通會員
2012-12-13 10:46:34
7樓: to 5樓 egust (歡迎訪問 Delphi@smth.org):
用CTRY_PRCHINA調(diào)用MultiByteToWideChar仍然沒解決.
跟蹤時發(fā)現(xiàn)ch已經(jīng)轉(zhuǎn)換成wchar_t,但在英文xp下面仍然不能正常顯示轉(zhuǎn)換后的wchar_t.