iso-8859-1日韓文網頁內容以TADOQuery存入DB |
缺席
|
kirkcctw
一般會員 發表:4 回覆:3 積分:1 註冊:2007-12-02 發送簡訊給我 |
各位好,
我用 TCppWebBrowser 讀取一個日文或韓文www網頁 , 我看 html source code 的 charset = iso-8859-1 然後用 IHtmlDocument 把其中一部分日文的 innerText 抓出來想要把這個日文用TADOQuery update 到其中一個 nvarchar 的欄位 我已經可以成功拉中文或英文網頁 但是改拉日文或韓文 , 存入MSSQL , 讀出來就是亂碼(一堆??????? ??????問號) 我的配備是 Windows XP SP3(繁中) BCB6 大概的方法為下 (省略蠻多不相關的 code) [code cpp] Variant TDs = levents.OleFunction("getElementsByTagName","TD"); Variant vTD = TDs.OleFunction("Item",1); AnsiString ttt = vTD.OlePropertyGet("InnerText"); ADOQuery1->SQL->Text = "Update StockClass set KR_NAME=N'" ttt "' where sid=" sid; ADOQuery1->ExecSQL(); [/code] 請有經驗的高手指點迷經 , 謝謝... |
kirkcctw
一般會員 發表:4 回覆:3 積分:1 註冊:2007-12-02 發送簡訊給我 |
經過一番實驗跟研究 , 找出一個完整的方法 , 給有需要的朋友一起參考
用 IHtmlDocument 拉 HTML innerText , 一定要用 WideString 來接 WideString SName = vTD.OlePropertyGet("InnerText"); 如果把斷點設在 SName , 可以看到 WideString 內容例如 "\x0E42\x0E2D\x0E21\x0E34\x0E22\x0E32 \x0E2D\x0E32\x0E14\x0E34\x0E08\x0E32" 把 WideString 寫入 MSSQL , Table欄位一定要是 nvarchar 或 nchar 型態 然後不可以用TADOQuery 的 SQL->Text , 一定要用 TADOCommand 因為只有TADOCommand CommandText 支援 WideString 型態 組 SQL 語法時 , 需要用 WideString 來裝 , 例如 : WideString tsql; tsql = L"Update ssTable set Name_T=N'"; tsql = tsql SName; tsql = tsql L"' where sid="; tsql = tsql SID; 由於 WideString 的字串相加怪怪的 , 應過測試應該要用以上這樣一行一行加才會正確 最後要寫入 MSSQL TADOCommand *adoC = new TADOCommand(NULL); adoC->ConnectionString = CONNSTR; adoC->ParamCheck = false; adoC->CommandType = cmdText; adoC->CommandText = tsql; adoC->Execute(); delete adoC; 注意其中 ParamCheck 一定要設為 false , 不然寫入時編碼又會被改掉了 , 寫入就會變成一堆 ???????? (問號) 以上程式碼在 繁中XP PRO SP3 BCB6 測試 繁 簡 英 韓 日 泰文 皆能正常運作 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |