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

BASE64和MEMO問題

尚未結案
pcboy
版主


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-10-18 22:55:05 IP:61.219.xxx.xxx 訂閱
小弟用 Delphi 7 和 Visual Studio 2008 (C#) 各寫了一個 BASE64 編碼/解碼程式
如果把 文字都寫在第一行進行編碼,兩個程式編碼結果相同
如果有兩行文字,就算看來相同,編碼結果卻不相同
是因為換行字元的影響嗎 ?
Delphi 7 在 Memo 每一行後面自動插入換行字元 ?
而 Visual Studio C# 2008 的 richTextBox 不會自動添加額外的字元 ?
還是其他原因 ?
(小弟在某系統另外有程式,是對很長的文字 File 內容做編碼
Visual Studio C# 2008 寫的,把 File 內容貼到 richTextBox 可以正常解碼
貼到 Memo 卻解碼失敗
就算把預設 WordWrap 從 true 改 false 也沒用
Memo1.WordWrap := false;
Memo2.WordWrap := false;
)
請問該如何解決 ?


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

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
sryang
尊榮會員


發表:38
回覆:741
積分:875
註冊:2002-06-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-10-20 09:43:47 IP:111.254.xxx.xxx 訂閱
.Net 的 WinForm 中,對應 Delphi TMemo 的元件,並不是 RichTextBox,而是 Multiline 屬性為 True 的 TextBox
RichTextBox 是用來處理 rich text 用的 (就是 RTF 格式)

RichTextBox 的換行,只有 0A
而 Multiline 屬性為 True 的 TextBox (.Net) 跟 TMemo (Delphi) 的換行都是 0D0A

你的問題,可以試著把 Memo 以及 RichTextBox 的內容分別存成檔案,然後用可以看二進位碼的文字編輯器打開來看看,
就可以知道為什麼不一樣的原因了
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
pcboy
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-10-20 10:26:34 IP:210.69.xxx.xxx 訂閱
小弟用下面(只有一行)
0123456789ABCDEF
各種情況都編出
MDEyMzQ1Njc4OUFCQ0RFRg==

我用下面 (F在第二行) 測試編出 BASE64
0123456789ABCDE
F

Delphi Memo1 的結果顯示 MDEyMzQ1Njc4OUFCQ0RFDQpG
Delphi RichEdit1 的結果顯示 MDEyMzQ1Njc4OUFCQ0RFDQpG
VC# 2008 richEditBox1 的結果顯示 MDEyMzQ1Njc4OUFCQ0RFCkY= (不同)
VC# 2008 textBox1 的結果顯示 MDEyMzQ1Njc4OUFCQ0RFDQpG

存檔結果 用 UltraEdit 的文字和 HEXT 模式去觀察

Memo1.txt 內容 F 之前被插入了 0D 0A

RichEdit1.txt 內容有5行 (換行是0D 0A,第5行有個00)
{\rtf1\ansi\ansicpg950\deff0\deflang1033\deflangfe1028{\fonttbl{\f0\fnil\fcharset136 MS Sans Serif;}}
\viewkind4\uc1\pard\lang1028\f0\fs16 0123456789ABCDE
\par F
\par }

VC# 2008 richEditBox1.txt 內容 (換行是0D 0A,第5行有個00)
{\rtf1\ansi\ansicpg950\deff0\deflang1033\deflangfe1028{\fonttbl{\f0\fnil\fcharset136 \'b7\'73\'b2\'d3\'a9\'fa\'c5\'e9;}}
\viewkind4\uc1\pard\lang1028\f0\fs18 0123456789ABCDE\par
F\par
}

VC# 2008 textBox1 沒有 SaveFile 的方法(Method)


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

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
編輯記錄
pcboy 重新編輯於 2010-10-19 20:27:20, 註解 無‧
sryang
尊榮會員


發表:38
回覆:741
積分:875
註冊:2002-06-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-10-20 10:44:31 IP:111.254.xxx.xxx 訂閱
樓主抱歉了,RichEdit 跟 RichTextBox 存檔時都會使用 RTF 格式存檔,而不是純文字格式
有另一個方法可以幫助您看出其中的差異
就是另寫一個 function 把要編碼的內容,轉換成 16 進位,跟編碼結果一併顯示出來
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
系統時間:2017-10-19 11:21:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!