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

請問UTF8編碼的字串怎麼加入Access中

缺席
lindavid
一般會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-03-29 17:58:53 IP:61.71.xxx.xxx 訂閱
請教各位大大:
小弟這邊有一份純文字(.txt)檔,是UTF8編碼的,我想把他的內容讀到Access中,因為其內容有簡體字以及其他國文字,所以用UTF8但是一但加到Access中,如果是直接用UTF8Stream的word或是char的szData全部會變成亂碼,經過Decode的WideStream則是繁體中文 英文 符號可顯示但是其他(例如簡體字)都會變成'?'。
<textarea class="cpp" rows="10" cols="60" name="code">char szData[500]; UTF8String word; WideStream word_0; TMemoryStream *fp = new TMemoryStream(); fp->LoadFromFile(filename); for( i=0 ; i<0 ; i ) { k=0; do{ fp->Read( &szData[k], 1 ); k ; }while(szData[k-1] != '\n'); szData[k-1]='\0'; //word = szData;//若是直接用這個變數丟給SQL語法則全部都是亂碼 word_0 = UTF8Decode(szData); ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add("INSERT INTO test (文字) VALUES('" word_0 "')"); ADOQuery1->ExecSQL(); ADOQuery1->Close(); </textarea><br /> 我原本在猜想應該是UTF8Decode出來的東西不吃簡體字,所以發狠招用了下面的來做測試
<textarea class="cpp" rows="10" cols="60" name="code">WideString wa = (WideString)WideChar(0x0028); //為( WideString wb = (WideString)WideChar(0x81EA); //為自 WideString wc = (WideString)WideChar(0x52A8); //為动 WideString wd = (WideString)WideChar(0x6B65); //為步 WideString we = (WideString)WideChar(0x67AA); //為枪 ADOQuery1->SQL->Add("INSERT INTO test (文字) VALUES('" lang "','" wa wb wc wd we "')"); </textarea>
但是這樣在Access上就會變成 (自?步?

所以又有可能是sql語法再傳遞的時候 不吃UTF8

想請問各位大大有解決辦法嗎?
或是不要透過ADOQuery的SQL來加入資料到access又可以吃UTF8(簡體/各國語言)的方法

萬分感激
編輯記錄
taishyang 重新編輯於 2007-07-30 20:16:06, 註解 將文章分類成[問題]‧
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-03-30 06:24:49 IP:211.22.xxx.xxx 未訂閱
1.你的 Office 是多少版的? 我只知道2003 以後的 Access 資料欄為是絕對支援 Unicode 的。
2.C Builder 的 VCL 元件是不支援 Unicode , 請使用 TTntUniCode Controls。
http://www.tntware.com/delphicontrols/unicode/downloads.htm不過現在好像要賣錢了,快去網路上搜尋一下之前免費的版本吧!
3.內建的ADO物件當然也不支援Unicode,也請至http://www.tntware.com/delphicontrols/unicode/downloads.htm下載 TTntEx,然後所有的存取變數與VCL元件全部改用 WideString與TTntUnicodeCtrols即可達到你的要求。
lindavid
一般會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-03-30 10:58:16 IP:61.71.xxx.xxx 訂閱
您好 
我office的版本是2000的 ^^"
可是手動複製阿拉伯文再貼上也可以正常顯示,所以應該不會是這邊的問題

另外您提到有關vcl元件的變成支援unicode的更新,可是我昨天晚上自己又渾然試了一下
如果用UTF8Decode解出來的WideString型態 寫回另一個記事本上面也可以正常顯示耶
(雖然我沒更新unicode補完計畫或是其他元件)。

所以可能真的是SQL丟參數的時候的問題
想再請問一下BCB中的AODQuery中的SQL語法還能更新成支援utf8或是unicode嗎
不然就要用另外的方式連結結資料庫了(我只會用AODQuery ^^"..)

感激不盡
yang2066
一般會員


發表:2
回覆:3
積分:6
註冊:2005-07-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-07-30 17:35:24 IP:59.124.xxx.xxx 未訂閱
依您的描述,問題原因應該跟程式無關
有可能是您的Access欄位「Unicode編碼」設定未設成「是」
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-07-30 17:57:41 IP:203.204.xxx.xxx 訂閱
> 可是手動複製阿拉伯文再貼上也可以正常顯示
不要完全相信 "複製" "貼上" 的測試 , 它可能會幫您依照情況轉碼
做個小測試
1.用 Notepad.exe 輸入 "中文" 兩字, 存成 Unicode 檔案 (假設稱為 c.txt), 關閉 Notepad
2.執行 UltraEdit (小弟用 13.00 1 版, 太舊版不支援 UniCode)
3.執行 Notepad, 開啟 c.txt , 複製 "中文" 兩字, 貼到 UltraEdit 中, 按下 Ctrl-H 看編碼
4.用 UltraEdit 開啟 c.txt , 按下 Ctrl-H 看編碼
5.您會發現兩者編碼不同

------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

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