UNICODE文字檔為何參雜有空白行? |
答題得分者是:Stallion
|
joana
一般會員 發表:35 回覆:70 積分:21 註冊:2005-09-02 發送簡訊給我 |
我有參考站上資料,從MS SQL2000轉出UNICODE 文字檔,但不知為何分行,有的正常(一行接一行),有的
空一行或空二行,不知如何解決,請各位大德幫幫忙 function WriteWideString2File(filename: string; ws: WideString):Boolean; const WideBOM_LSB_First = WideChar(#$FEFF); var wf: WideString; f: TFileStream; i: integer; begin Result := false; wf := WideBOM_LSB_First; f:= TFileStream.Create(filename, fmCreate); try f.Write(wf[1], 2); for i:= 1 to length(ws) do f.Write(ws[i], sizeof(ws[i])); Result := true; finally f.Free; end; end; procedure TForm1.BitBtn1Click(Sender: TObject); var myws: WideString; begin myws :='' ; ADOQuery1.first; while not ADOQuery1.eof do begin myws :=myws ADOQuery1['thd_mmrk'] #13#10; ADOQuery1.next; end; WriteWideString2File('c:\in\test.txt', myws); end; 底下是轉出的UNICODE文字檔 提供類似Adobe 公司的Photoshop, fireworks的圖形處理功能。 存儲空間大小,兼容性等問題而煩惱。兼容性等問題而煩惱。存儲空間大小 中国 中国123ABC储存空间烦恼 編輯記錄
joana 重新編輯於 2007-06-14 11:21:13, 註解 無‧
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
procedure TForm1.BitBtn1Click(Sender: TObject);
var myws: WideString; begin myws :='' ; ADOQuery1.first; While not ADOQuery1.eof do begin myws :=myws Trim(ADOQuery1['thd_mmrk']) #13 #10; ADOQuery1.next; end; WriteWideString2File('c:\in\test.txt', myws); end; |
joana
一般會員 發表:35 回覆:70 積分:21 註冊:2005-09-02 發送簡訊給我 |
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
加上這一行對你的程式應該對你原程式不會有影響,Trim只是單純去除字串頭尾的空白以及控制字元而已,去除後你還是要作文字的編碼轉換啊?
===================引 用 joana 文 章=================== 謝謝stallion前輩的回覆,但 在WideString 之前加上 trim ,丟到文字檔會變成亂碼耶! myws :=myws Trim(ADOQuery1['thd_mmrk']) #13 #10; 轉到文字檔之亂碼如下: 提供?似Adobe 公司的Photoshop, fireworks的?形?理功能。 存?空?大小,兼容性等??而??。兼容性等??而??。存?空?大小 包括?Twain ?描?中?得?像(??和多??面) 中? 中? 中?123ABC?存空??? |
joana
一般會員 發表:35 回覆:70 積分:21 註冊:2005-09-02 發送簡訊給我 |
謝謝前輩的回覆,前輩分析的有理,但程式執行後的結果,確是如此,只要加上trim,凡是簡体的字都會變亂碼,
繁體的部份就正常,如果前輩有空也可試試看 原始資料如下 包括从Twain 扫描仪中获得图像(单个和多个页面) 提供类似Adobe 公司的Photoshop, fireworks的图形处理功能。 存储空间大小,兼容性等问题而烦恼。兼容性等问题而烦恼。存储空间大小 包括从Twain 扫描仪中获得图像(单个和多个页面) 或是那裡有可直接將BIG5碼中文字轉為GB碼之unicode ? 如果只考慮轉碼,不考慮繁簡寫法不同的話,可以用下列程式 中国 中国 中国123ABC储存空间烦恼 |
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
procedure TForm1.BitBtn1Click(Sender: TObject);
var myws: WideString; begin myws :='' ; ADOQuery1.first; while not ADOQuery1.eof do begin myws :=myws Trim(ADOQuery1['thd_mmrk']) #13#10; //我目前手邊沒有Unicode的資料表可以測試,不過我之前寫過類似這種主題,ADO原本的物件不支援Unicode,所以TNT才改寫同時也包含 ADOQuery部分,如果我預料沒錯的話,你用Debugger可以看到(不加上Trim),由ADOQuery取出值時,字碼早已經變了,所以看來你 必須使用支援Unicode改寫過的ADO物件。 ADOQuery1.next; end; WriteWideString2File('c:\in\test.txt', myws); end; |
joana
一般會員 發表:35 回覆:70 積分:21 註冊:2005-09-02 發送簡訊給我 |
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
1.加上Trim以後為何會變成亂碼我也不知道,按照線上說明Trim是個Overload函數,明明支援WideString。
2.TNT UNICDOE CONTROL現在整套改為TMS了,之前的版本是Free的,現在要付費!去網路上找找看之前的版本吧~不過要注意的是ADOQuery部分是屬於他的Extention(TntEx,其中包含了TntADODB)部分,還有如果你要用到ADOMemo部分也要下載TntWideAdoMemoField,這兩項是與其他TNT Unicode Control分開的。 3.以上TNT的老版本元件,連同Unicode controls以及TntExUpdate部分共有四種,總計3.5MB左右。 ===================引 用 joana 文 章=================== 謝謝前輩的說明,剛做了trace,ADO取出之值是亂碼,但實在不明白,既然是亂碼,為何經過WriteWideString2File('c:\in\test.txt', myws)之函式後,會變正常,但加上TRIM後,會變亂碼? 還有前輩所提到的UNICODE 元件,這個元件是否還是FREE? |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
這題目好像很久了,但很可疑。因本人對於unicode算是有相當的了解,故也想知道是為什麼…
1/ 就Trim( )加入後所有簡體都亂碼的問題,我覺得應該是發生在ADOQuery1['thd_mmrk']這個傳回值的型別。因個人不用這個元件,故不知此元件「自動」傳回的型別是string 或是widestring? 我猜應該是string而非widestring! 然而當 myws :=myws ADOQuery1['thd_mmrk'] #13 #10; 沒trim時,它的傳回值會因為 myws是widestring,而動用了 widestring的字串相加方法,進而強制ADOQuery轉為widestring。 但當有trim時,則trim的function會被先計算,而trim本身支持string和widestring,trim會把ADOQuery當string 或是widestring? 也許這就是關鍵! 可能的話不要用自動轉換型別的方式,而手動的把ADOQuery的傳回值定為widestring再trim看看。也許你會問,那繁體為何不會出問題? 應該是本身使用的是繁體windows,而此環境下的ansistring與unicode的繁體都是自動互通的。 2/ 另外要說明一下,TADOConnection, command, dataset元件肯定是支持unicode的!!! 這要注意!! 但TADOQuery不清楚,因為…它是borland為了模擬TQuery for bde而包裝的,也許有部份不unicode吧? 3/ 為何你trace時看到是亂碼,但存檔是正常的? 因為…你trace的時候應該是在delphi的ide環境下查值/字串,因為delphi的ide是不支持unicode的,你肯定會看到亂碼! 然而你存檔後,你用什麼看值? ultraedit? notepad unicode模式? 對吧? 當然是會看到正常的,因為這些編緝軟體都支持unicode 以上我尚未親身測式,僅就學理上推論,若有人測得因原,也請post上來分享一下。謝謝唷! ===================引 用 joana 文 章=================== 謝謝stallion前輩的回覆,但 在WideString 之前加上 trim ,丟到文字檔會變成亂碼耶! myws :=myws Trim(ADOQuery1['thd_mmrk']) #13 #10; 轉到文字檔之亂碼如下: 提供?似Adobe 公司的Photoshop, fireworks的?形?理功能。 存?空?大小,兼容性等??而??。兼容性等??而??。存?空?大小 包括?Twain ?描?中?得?像(??和多??面) 中? 中? 中?123ABC?存空???
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |