[問題] 有辦法不定義_UNICODE而讓CEdit能讀日ꐠ…

看板C_and_CPP作者 (風)時間14年前 (2009/08/27 17:24), 編輯推噓3(3022)
留言25則, 6人參與, 最新討論串1/2 (看更多)
請問有沒有人有相關經驗,我繼承了CEdit生出了一個文字輸入框, 但是因為 "要配合整個專案,不能" 將Character Set 設為 Use Unicode Character Set 這樣就面臨不能輸入日文韓文的問題(我是用ctrl+c ctrl+V貼在輸入框 裡,一貼上馬上變問號,但是中文都很正常),原本以為只是不能顯示,但麻煩的是 CEdit好像會將辨識不出來的字全部轉為問號(?),所以就連想要讀取文字的碼來 處理也不行。像許功蓋這種5c字元都可以正常讀取不是就表示支援UNICODE嗎? 為什麼就是無法支援其他語系,字型的部份我試過 OEM_CHARSET DEFAULT_CHARSET SHIFTJIS_CHARSET(這時我只貼上日文) 讀取的API是: GetWindowTextW(hEdit, szBuf, 1024); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.96.186.76 ※ 編輯: worldxxi 來自: 140.96.186.76 (08/27 17:25)

08/27 17:45, , 1F
你自己都說不是用 unicode 了, 那當然不在正在用的語系
08/27 17:45, 1F

08/27 17:45, , 2F
的字就出問題了, 那個字不在當前語系, 它也不可能給你
08/27 17:45, 2F

08/27 17:46, , 3F
拿到字去處理, 因為這個字真的 "不存在" 嘛, 你叫它生
08/27 17:46, 3F

08/27 17:46, , 4F
什麼給你讀
08/27 17:46, 4F

08/27 17:48, , 5F
那請問我要怎樣更改當前語系呢?
08/27 17:48, 5F

08/27 17:48, , 6F
你改了, 又會變成中文讀不到耶...
08/27 17:48, 6F

08/27 17:54, , 7F
如果有辦法 unicode就沒有存在價值了
08/27 17:54, 7F

08/27 18:04, , 8F
那順便再問一下,為什麼在專案的其他地方有用DrawTextW
08/27 18:04, 8F

08/27 18:04, , 9F
他就可以印出日文呢?
08/27 18:04, 9F

08/28 01:49, , 10F
許功蓋 跟 Unicode 關係? 搞錯了吧 DrawTextW 是特殊案例
08/28 01:49, 10F

08/28 01:51, , 11F
基本上 MFC 不 define 要 UCS2 等於是要 Win32 API 寫了
08/28 01:51, 11F

08/28 08:56, , 12F
那大家遇到這種情況通常怎麼解決呢?自己寫Edit嗎?
08/28 08:56, 12F

08/28 09:19, , 13F
要在big5下頭搞日文只有倚天碼啦, 不過, win32沒倚天碼說
08/28 09:19, 13F

08/28 09:20, , 14F
用unicode補完計畫吧
08/28 09:20, 14F

08/28 09:21, , 15F
如果這程式寫出來只有自己用才能考慮用uao....
08/28 09:21, 15F

08/28 09:21, , 16F
專案一開始想支援外國文字就不能用mbcs, 砍掉重練吧
08/28 09:21, 16F

08/28 09:22, , 17F
要發布出去的東西不應該用uao的方式處理字碼問題....
08/28 09:22, 17F

08/28 09:23, , 18F
不過關於這東西我倒是想到一招, 如果可以保證自己負責的部
08/28 09:23, 18F

08/28 09:23, , 19F
份對於專案其它部份是黑盒子的話, 只要把所有當成介面的方
08/28 09:23, 19F

08/28 09:24, , 20F
法跟函數都用char,而不用TCHAR, 然後自己部份全用unicode
08/28 09:24, 20F

08/28 09:25, , 21F
外面進來的東西再用MultiByteToWideChar之類的轉
08/28 09:25, 21F

08/28 09:25, , 22F
應該可以
08/28 09:25, 22F

08/28 09:58, , 23F
我也是有想過全部讀進來再轉換,可是我不知道怎樣讓使用
08/28 09:58, 23F

08/28 09:59, , 24F
者輸入,應該說不知道怎樣擷取使用者輸入文字後送出來的
08/28 09:59, 24F

08/28 10:01, , 25F
編碼,如果可以得到編碼,轉換後就可以用DrawTextW印出來
08/28 10:01, 25F
文章代碼(AID): #1Abb2tbM (C_and_CPP)
文章代碼(AID): #1Abb2tbM (C_and_CPP)