全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1719
推到 Plurk!
推到 Facebook!

iso-8859-1日韓文網頁內容以TADOQuery存入DB

缺席
kirkcctw
一般會員


發表:4
回覆:3
積分:1
註冊:2007-12-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-07-02 02:24:17 IP:63.220.xxx.xxx 訂閱
各位好, 
我用 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 重新編輯於 2009-07-02 02:24:57, 註解 無‧
kirkcctw 重新編輯於 2009-07-02 02:26:19, 註解 無‧
kirkcctw
一般會員


發表:4
回覆:3
積分:1
註冊:2007-12-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-07-03 21:55:54 IP:63.220.xxx.xxx 訂閱
經過一番實驗跟研究 , 找出一個完整的方法 , 給有需要的朋友一起參考

用 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 測試 繁 簡 英 韓 日 泰文 皆能正常運作

系統時間:2024-03-28 17:41:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!