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

IdHTTP 讀取的網頁資料儲存到資料庫有些字會變亂碼

缺席
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-02 22:04:28 IP:61.59.xxx.xxx 未訂閱
在 Delphi6 使用 Indy 的 IdHTTP 元件來讀取網頁, 該網頁的編碼是 charset=iso-8859-1 未經處理就直接存到 MSSQL 的資料庫裡. 可是在從資料庫讀出來顯示, 有一些特別的字就會變成亂碼了.    圖中第二個與第三個字是原來的樣子 從資料庫讀取後未經處理就顯示的結果 要怎麼處理才能避免這樣內容被破壞的狀況呢? 雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶 發表人 - bestlong 於 2005/04/02 22:16:23
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-05 20:47:40 IP:218.19.xxx.xxx 未訂閱
bestlong 您好:    看您的截圖顯示,應該是在中文環境中 "直接" 顯示出來的,看起來像是未設對語系字集所致,如果在瀏覽器顯示,只要設定 Charset 為原來的 iso-8859-1,應該可以正常顯示的,但如果是要在 Delphi 的元件裡顯示,那麼可能就麻煩了,因為我做過測試,在中文環境裡似乎無法直接用設定元件 Font 的 Charset 屬性來顯示某些語系的某些字元 (編碼大於 127 的 ASCII Code)。    我以您做為範例的字樣 "Bj顤ling" (Björling) 配合 TEdit 物件作測試的結果,使用 "Times New Roman"、"Courier New" 或 "Arial" 字型,並將 "字集" 設為 "中歐" (EASTEUROPE_CHARSET),是可以正常顯示的,但是您得留意點,並非每種字型都有 "中歐" 字集可選擇,試試看吧。 附註: iso-8859-1 好像是指 "西歐",而 EASTEUROPE_CHARSET 指的又是 "東歐",但是在 Design mode 直接設定元件字型時,在字型對話框裡則必須要設成 "中歐",這真的是有點奇怪....。 發表人 - RedSnow 於 2005/04/05 22:25:14 發表人 - RedSnow 於 2005/04/05 22:29:31
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-19 22:50:39 IP:61.59.xxx.xxx 未訂閱
RedSnow 你好: 這樣就需要在所有具有 Font 屬性的元件都要將 Charset Type 調整成 EASTEUROPE_CHARSET . 這樣在顯示時才不會有問題. 不過因為我是將 IdHttp 讀取的網頁資料直接丟給 TStringList 型態的物件, 然後再作後續分析. 只是不知道這樣是否就會破壞了其中的特殊字元. 雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-04 23:02:19 IP:61.59.xxx.xxx 未訂閱
RedSnow 你好:    關於你的測試過程想確認一下, 是否只是單純的用輸入法在 TEdit 下輸入中歐字集的特定字?    
引言: 我以您做為範例的字樣 "Bj顤ling" (Björling) 配合 TEdit 物件作測試的結果,使用 "Times New Roman"、"Courier New" 或 "Arial" 字型,並將 "字集" 設為 "中歐" (EASTEUROPE_CHARSET),是可以正常顯示的,但是您得留意點,並非每種字型都有 "中歐" 字集可選擇,試試看吧。
雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-04 23:12:01 IP:61.59.xxx.xxx 未訂閱
我的程式資料流 IdHTTP 元件讀取網頁 > TStrings 做分析 > ADOQuery > MSSQL2K 之後讀取 MSSQL2K 的資料時, 中歐的特殊字就會有很多部分變亂碼. 用了 SQL Profiler 觀察發現, 透過 ADO 連接資料庫時設定了下列的屬性 -- network protocol: TCP/IP set quoted_identifier on set implicit_transactions off set cursor_close_on_commit off set ansi_warnings on set ansi_padding on set ansi_nulls on set concat_null_yields_null on set language 繁體中文 set dateformat ymd set datefirst 7 可能其中的 set language 繁體中文 屬性設定不適當而造成亂碼. 雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶 發表人 - bestlong 於 2005/05/04 23:14:18
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-05 02:09:21 IP:218.19.xxx.xxx 未訂閱
bestlong 您好:    
引言:關於你的測試過程想確認一下, 是否只是單純的用輸入法在 TEdit 下輸入中歐字集的特定字?
是的,我是直接在 TEdit 元件中輸入測試的字樣,然後設定 TEdit 元件屬性表的字型與字集,然後執行程式來測試的。
引言:我的程式資料流 IdHTTP 元件讀取網頁 > TStrings 做分析 > ADOQuery > MSSQL2K 之後讀取 MSSQL2K 的資料時, 中歐的特殊字就會有很多部分變亂碼. 用了 SQL Profiler 觀察發現, 透過 ADO 連接資料庫時設定了下列的屬性 -- network protocol: TCP/IP ....... set language 繁體中文 ....... 可能其中的 set language 繁體中文 屬性設定不適當而造成亂碼.
站上有數篇與您類似的問題,好像都是經過資料庫的存取後產生的結果,我沒有安裝類似的環境,否則我會設法做進一步的相關測試,儘管如此;但我並不覺得是資料庫的問題,因為資料庫儲存的是資料的 "字碼" 而不是 "字型",中文雖是雙位元組的資料,但紀錄時仍是是使用 8bit 的 ASCII Code 紀錄的,您列舉的那些字樣,之所以會在顯示時變成 "亂碼" 就是因為那些字元的內碼超過 127 (0x7F),所以才會被抓來當成中文字顯示。 要正確紀錄那些 "非英文" 字元時,因為它們的編碼範圍也是在 127 (0x7F) 之後 (我記得以前在 DOS 時代時,大於 127 之後的 ASCII 字元好像叫做 semi-graphics character 吧?),所以也要使用到 8 個 bit,因此我推論那些字元碼 (內碼) 在存取於資料庫時並未變動 (否則不會有顯示成亂碼的現象),取出後之所以無法正確顯示成歐語字型,應該是在您由資料庫取出顯示時,某個步驟未設定好正確的字型或字集 (Charset),或是字型、字集被 "重設" 所致,因為您只有列出存入資料庫的步驟,而未列出由資料庫取出到顯示的步驟,所以我無法推測問題出在那裡?您再試試看吧。 發表人 - RedSnow 於 2005/05/05 02:13:11
系統時間:2024-11-25 3:19:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!