請問indy中用來解碼utf-8的元件是什麼? |
答題得分者是:timhuang
|
pcernet
初階會員 發表:69 回覆:113 積分:41 註冊:2002-11-29 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
|
pcernet
初階會員 發表:69 回覆:113 積分:41 註冊:2002-11-29 發送簡訊給我 |
感謝您的回覆,其實您所指引的兩個版我都看過,其中
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26917 是BCB,而且是Big5轉UTF-8,再重新仔細閱讀,難有斬獲。
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26110 是C ,問題不在收信,而在發信,再重新仔細閱讀,似與小弟的問題沒有交集。 在Delphi中,小弟讀取了郵件的各個表頭資訊後,解碼大都沒有問題,唯讀只有UTF編碼的文字還是無法順利解碼,試過Indy的幾個解碼元件,還是沒用,不得已在此求教,小人愚昧,敬請有識之士不吝指教,謝謝。
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 感謝您的回覆,其實您所指引的兩個版我都看過,其中 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26917 是BCB,而且是Big5轉UTF-8,再重新仔細閱讀,難有斬獲。 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26110 是C ,問題不在收信,而在發信,再重新仔細閱讀,似與小弟的問題沒有交集。 在Delphi中,小弟讀取了郵件的各個表頭資訊後,解碼大都沒有問題,唯讀只有UTF編碼的文字還是無法順利解碼,試過Indy的幾個解碼元件,還是沒用,不得已在此求教,小人愚昧,敬請有識之士不吝指教,謝謝。pcernet 你好: 你的問題不是要解 UTF8 的編碼嗎?? 以上兩篇連結文章中已經有解法了 利用的是
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
pcernet
初階會員 發表:69 回覆:113 積分:41 註冊:2002-11-29 發送簡訊給我 |
RaynorPao您好,感謝您不嫌棄小弟的問題。 UTF8Decode在 Delphi5好像沒有提供 郵件的主旨取回的字串是
=?utf-8?B?Rnc6IERPTU9URVggQ0hJTkEgRkxPT1LlnLDpnaLmnZDmnpPlj4roiJboo50=?= =?utf-8?B?5p6d6KGT5bGV6Ka95pyD5LmL6LOH5paZLi4uLuiri WPg mFjA==?= //WideCharLenToString 將ANSI字符串轉換為UNICODE字符串
//WideCharLenToStrVar 將UNICODE字符串轉換為ANSI字符串變量
//WideCharToString 將UNICODE字符串轉換為ANSI字符串
//WideCharToStrVar 將UNICODE字符串轉換為ANSI字符串變量 這是小弟對問題認識不清,所以問的不好,真的很抱歉,再次謝謝您。 發表人 - pcernet 於 2003/04/06 11:29:10
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: RaynorPao您好,感謝您不嫌棄小弟的問題。 UTF8Decode在 Delphi5好像沒有提供 郵件的主旨取回的字串是 =?utf-8?B?Rnc6IERPTU9URVggQ0hJTkEgRkxPT1LlnLDpnaLmnZDmnpPlj4roiJboo50=?= =?utf-8?B?5p6d6KGT5bGV6Ka95pyD5LmL6LOH5paZLi4uLuiri WPg mFjA==?= //WideCharLenToString 將ANSI字符串轉換為UNICODE字符串 //WideCharLenToStrVar 將UNICODE字符串轉換為ANSI字符串變量 //WideCharToString 將UNICODE字符串轉換為ANSI字符串 //WideCharToStrVar 將UNICODE字符串轉換為ANSI字符串變量 這是小弟對問題認識不清,所以問的不好,真的很抱歉,再次謝謝您。 pcernet 你好: (1)看到了你所提供的字串,我終於知道你為什麼不能夠了解了 (> < class="code"> 備註: (1)曾經有人遇過跟你很類似的問題,不過,只是 Base64 Encode/Decode 你可以參考以下的連結文章 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26053 (2)有關 Base64 的 Encode/Decode 在本網站已經討論很多次了(Delphi/BCB) 建議你利用搜尋的功能,就可以找到許多有關這方面的文章的 > --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
pcernet
初階會員 發表:69 回覆:113 積分:41 註冊:2002-11-29 發送簡訊給我 |
謝謝你,RaynorPao 我的問題總算向前一大步了,經過Base64Decode後,解碼後,變成 Fw: DOMOTEX CHINA FLOOR?圈????鋆 英文的部份顯示都正常,但後面跟著一串問號和亂碼,不知道是何原因,再執行 MultiByteToWideChar(CP_ACP, 0,pchar(source), -1, Pwidechar(dest), 1024); 之後,反而丟出空白,再請教,謝謝。 發表人 - pcernet 於 2003/04/06 18:27:09
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 謝謝你,RaynorPao 我的問題總算向前一大步了,經過Base64Decode後,解碼後,變成 Fw: DOMOTEX CHINA FLOOR?圈????鋆 英文的部份顯示都正常,但後面跟著一串問號和亂碼,不知道是何原因,再執行 MultiByteToWideChar(CP_ACP, 0,pchar(source), -1, Pwidechar(dest), 1024); 之後,反而丟出空白,再請教,謝謝。 pcernet 你好: 你應該是少做了一個步驟(只做了以下綠色部分,紅色部分還沒做) <> > > >> --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
pcernet
初階會員 發表:69 回覆:113 積分:41 註冊:2002-11-29 發送簡訊給我 |
RaynorPao 您好,您解出來的應該是OK的。 我加了下面的碼之後,在 Build 的時候出現了警告,"Constant 0 converted to NIL",執行程式之後,也是丟回來空字串。 source="=?utf-8?B?Rnc6IERPTU9URVggQ0hJTkEgRkxPT1LlnLDpnaLmnZDmnpPlj4roiJboo50=?= =?utf-8?B?5p6d6KGT5bGV6Ka95pyD5LmL6LOH5paZLi4uLuiri WPg mFjA==?="; value:=pchar(base64decode(source)); MultiByteToWideChar(CP_UTF8,0,value,-1,swap,1024); WideCharToMultiByte(CP_ACP,0,swap,-1,value,1024,0,0); Result :=value; 您都寫這麼清楚了,我還是無法成功,只能再麻煩你了,謝謝。
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: RaynorPao 您好,您解出來的應該是OK的。 我加了下面的碼之後,在 Build 的時候出現了警告,"Constant 0 converted to NIL",執行程式之後,也是丟回來空字串。pcernet 你好: 改成以上這樣呢?? (source1="Rnc6IERPTU9URVggQ0hJTkEgRkxPT1LlnLDpnaLmnZDmnpPlj4roiJboo50="; value1:=pchar(base64decode(source1)); MultiByteToWideChar(CP_UTF8,0,value1,-1,swap1,1024); WideCharToMultiByte(CP_ACP,0,swap1,-1,value1,1024, nil, nil); Result :=value1;source2="5p6d6KGT5bGV6Ka95pyD5LmL6LOH5paZLi4uLuiri WPg mFjA=="; value2:=pchar(base64decode(source2)); MultiByteToWideChar(CP_UTF8,0,value2,-1,swap2,1024); WideCharToMultiByte(CP_ACP,0,swap2,-1,value2,1024, nil, nil); Result :=value2;您都寫這麼清楚了,我還是無法成功,只能再麻煩你了,謝謝。
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
pcernet
初階會員 發表:69 回覆:113 積分:41 註冊:2002-11-29 發送簡訊給我 |
RaynorPao 您好,再次謝謝您,也希望這個版能和有需要的人一起分享。 =?utf-8?B? 和 ?= 這些字會在 base64decode 這個函數中被處理,所以應該問題不在這裡,並且其他的Base64都能順利解碼,而使用坊間Base64的解碼軟體解出來的也是 "Fw: DOMOTEX CHINA FLOOR?圈????鋆"。 把Base64DeCode處理完的字(Value)做下列處理:
MultiByteToWideChar(CP_UTF8,0,value,-1,swap,1024);
這時 Swap 傳回來的字串已經是空白了。 WideCharToMultiByte(CP_ACP,0,swap,-1,value,1024, nil, nil); 讓您費心了,謝謝。
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: RaynorPao 您好,再次謝謝您,也希望這個版能和有需要的人一起分享。 =?utf-8?B? 和 ?= 這些字會在 base64decode 這個函數中被處理,所以應該問題不在這裡,並且其他的Base64都能順利解碼,而使用坊間Base64的解碼軟體解出來的也是 "Fw: DOMOTEX CHINA FLOOR?圈????鋆"。 把Base64DeCode處理完的字(Value)做下列處理: MultiByteToWideChar(CP_UTF8,0,value,-1,swap,1024); 這時 Swap 傳回來的字串已經是空白了。 WideCharToMultiByte(CP_ACP,0,swap,-1,value,1024, nil, nil); 讓您費心了,謝謝。pcernet 你好: 嗯...我想不到其他問題了耶 請問~~ > 備註: 另外,如果
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
pcernet
初階會員 發表:69 回覆:113 積分:41 註冊:2002-11-29 發送簡訊給我 |
|
mustapha.wang
資深會員 發表:89 回覆:409 積分:274 註冊:2002-03-13 發送簡訊給我 |
引言: RaynorPao 您好,多虧您不厭其煩的指導,這個問題可以結案了。 也不知道為什麼,做完 MultiByteToWideChar(CP_UTF8,0,value,-1,swap,1024); Result := WideChartoString(swap); 碼都解了差不多了,只有最後一個中文字沒出來,WideCharToMultiByte也沒用到,可以了,夠了,非常謝謝您,剩下的自己應該可以解決吧。 function UnicodeEncode(Str:string;CodePage:integer):WideString; var Len:integer; begin Len:=Length(Str); SetLength(Result,Len); Len:=MultiByteToWideChar(CodePage,0,PChar(Str),-1,PWideChar(Result),Len); SetLength(Result,Len-1); //end is #0 end; function UnicodeDecode(Str:WideString;CodePage:integer):string; var Len:integer; begin Len:=Length(String(Str))+1; //one for #0 SetLength(Result,Len); Len:=WideCharToMultiByte(CodePage,0,PWideChar(Str),-1,PChar(Result),Len,nil,nil); SetLength(Result,Len-1); end;久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人 |
gavinj123
初階會員 發表:88 回覆:48 積分:27 註冊:2002-10-15 發送簡訊給我 |
引言:mustapha.wang兄, 我想要把BIG5 ---> UNICODE 請問function UnicodeEncode(Str:string;CodePage:integer):WideString; 是不是就做的到了? 那CodePage參數是式表什麼呢?引言: RaynorPao 您好,多虧您不厭其煩的指導,這個問題可以結案了。 也不知道為什麼,做完 MultiByteToWideChar(CP_UTF8,0,value,-1,swap,1024); Result := WideChartoString(swap); 碼都解了差不多了,只有最後一個中文字沒出來,WideCharToMultiByte也沒用到,可以了,夠了,非常謝謝您,剩下的自己應該可以解決吧。function UnicodeEncode(Str:string;CodePage:integer):WideString; var Len:integer; begin Len:=Length(Str); SetLength(Result,Len); Len:=MultiByteToWideChar(CodePage,0,PChar(Str),-1,PWideChar(Result),Len); SetLength(Result,Len-1); //end is #0 end; function UnicodeDecode(Str:WideString;CodePage:integer):string; var Len:integer; begin Len:=Length(String(Str))+1; //one for #0 SetLength(Result,Len); Len:=WideCharToMultiByte(CodePage,0,PWideChar(Str),-1,PChar(Result),Len,nil,nil); SetLength(Result,Len-1); end;久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听 |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |