Delphi 2010 有關 Unicode 字串 的 Base64 編碼問題 |
答題得分者是:sryang
|
boson
中階會員 發表:74 回覆:155 積分:85 註冊:2004-07-31 發送簡訊給我 |
我使用 Delphi 2010 , 想要對一個 Unicode 字串進行 Base64 編碼,
我直接使用 Delphi 內建的 EncdDecd 單元 [code delphi] uses EncdDecd; procedure TForm1.Button1Click(Sender: TObject); var S:string; begin S:=EncodeString('游錫堃'); S:=DecodeString(S); Edit1.Text:=S; end; [/code] 將 '游錫堃' 字串編碼後, 再解碼, 結果得到的值卻是 '游錫?' , 堃字沒有正確解碼 這是哪裏出問題 ? |
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
我用你的程式碼來嘗試,得到一樣的結果,於是我嘗試去追蹤 EncodeSting 與 DecodeString
發現 EncodeSting 的第一行就掛了 他用 InStr := TStringStream.Create(Input); 得到的 InStr 內容是 (180, 229, 191, 252, 63) 怎麼會只有 5 個 byte?最後一個 byte 63 不就是 "?" 嗎? 所以,我把 EncdDecd 的 source code 另存新檔,嘗試以指定編碼的方式來修改看看。 發覺只要在 EncodeSting 中的 InStr := TStringStream.Create(Input); 這一行 以及 DecodeString 中的 OutStr := TStringStream.Create(''); 這一行 指定相同的編碼,就可以得到正確的結果 所以我修改了 EncodeSting 以及 DecodeString 如下: (引用另存新檔的 EncdDecd1 而不是原來的 EncdDecd ) [code delphi] function EncodeString(const Input: string; Encoding: TEncoding): string; var InStr, OutStr: TStringStream; begin InStr := TStringStream.Create(Input, Encoding); try OutStr := TStringStream.Create(''); try EncodeStream(InStr, OutStr); Result := OutStr.DataString; finally OutStr.Free; end; finally InStr.Free; end; end; function DecodeString(const Input: string; Encoding: TEncoding): string; var InStr, OutStr: TStringStream; begin InStr := TStringStream.Create(Input); try OutStr := TStringStream.Create('', Encoding); try DecodeStream(InStr, OutStr); Result := OutStr.DataString; finally OutStr.Free; end; finally InStr.Free; end; end; [/code] 而樓主的程式改成 [code delphi] procedure TForm1.Button1Click(Sender: TObject); var S:string; begin S:=EncodeString('游錫堃', TEncoding.Unicode); S:=DecodeString(S, TEncoding.Unicode); Edit1.Text:=S; end; [/code] 這樣就 OK 了
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |