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

請問indy中用來解碼utf-8的元件是什麼?

答題得分者是:timhuang
pcernet
初階會員


發表:69
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-05 12:06:50 IP:61.218.xxx.xxx 未訂閱
找了很久,試了很多,還是不行,謝謝。 或是可以提供UTF-8的解碼函數程式,主旨和寄件人都是亂碼,謝謝。 發表人 - pcernet 於 2003/04/05 12:49:10
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-05 13:55:49 IP:61.221.xxx.xxx 未訂閱
引言: 找了很久,試了很多,還是不行,謝謝。 或是可以提供UTF-8的解碼函數程式,主旨和寄件人都是亂碼,謝謝。
pcernet 你好: 有關 BIG5-->UNICODE-->UTF8 以及 UTF8-->UNICODE-->BIG5 的做法,請參考以下的連結文章
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
pcernet
初階會員


發表:69
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-05 16:17:20 IP:61.218.xxx.xxx 未訂閱
感謝您的回覆,其實您所指引的兩個版我都看過,其中 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-06 02:56:43 IP:61.221.xxx.xxx 未訂閱
引言: 感謝您的回覆,其實您所指引的兩個版我都看過,其中 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-06 10:59:58 IP:61.218.xxx.xxx 未訂閱
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-06 14:34:09 IP:61.221.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-06 17:55:55 IP:61.218.xxx.xxx 未訂閱
謝謝你,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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-04-06 22:55:20 IP:61.221.xxx.xxx 未訂閱
引言: 謝謝你,RaynorPao 我的問題總算向前一大步了,經過Base64Decode後,解碼後,變成 Fw: DOMOTEX CHINA FLOOR?圈????鋆 英文的部份顯示都正常,但後面跟著一串問號和亂碼,不知道是何原因,再執行 MultiByteToWideChar(CP_ACP, 0,pchar(source), -1, Pwidechar(dest), 1024); 之後,反而丟出空白,再請教,謝謝。
pcernet 你好:
你應該是少做了一個步驟(只做了以下綠色部分,紅色部分還沒做)
       <> >
 >
    -- 
        
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
pcernet
初階會員


發表:69
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-04-07 08:42:13 IP:61.218.xxx.xxx 未訂閱
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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-04-07 08:57:00 IP:203.73.xxx.xxx 未訂閱
引言: RaynorPao 您好,您解出來的應該是OK的。 我加了下面的碼之後,在 Build 的時候出現了警告,"Constant 0 converted to NIL",執行程式之後,也是丟回來空字串。
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 你好: 改成以上這樣呢?? (
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
pcernet
初階會員


發表:69
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-04-07 10:18:14 IP:61.218.xxx.xxx 未訂閱
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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-04-07 10:44:53 IP:203.73.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-04-07 12:26:35 IP:61.218.xxx.xxx 未訂閱
RaynorPao 您好,多虧您不厭其煩的指導,這個問題可以結案了。 也不知道為什麼,做完 MultiByteToWideChar(CP_UTF8,0,value,-1,swap,1024); Result := WideChartoString(swap); 碼都解了差不多了,只有最後一個中文字沒出來,WideCharToMultiByte也沒用到,可以了,夠了,非常謝謝您,剩下的自己應該可以解決吧。
mustapha.wang
資深會員


發表:89
回覆:409
積分:274
註冊:2002-03-13

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-12-12 16:31:18 IP:218.1.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-01-15 14:54:22 IP:211.75.xxx.xxx 未訂閱
引言:
引言: 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;
久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
mustapha.wang兄, 我想要把BIG5 ---> UNICODE 請問function UnicodeEncode(Str:string;CodePage:integer):WideString; 是不是就做的到了? 那CodePage參數是式表什麼呢?
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#16 引用回覆 回覆 發表時間:2004-02-11 19:15:18 IP:203.95.xxx.xxx 未訂閱
引言: 我想要把BIG5 ---> UNICODE 請問function UnicodeEncode(Str:string;CodePage:integer):WideString; 是不是就做的到了? 那CodePage參數是式表什麼呢?
hi, 若你要將 Big5->Unicode 的話, 該 CodePage 要設定為 950 即可!!
系統時間:2024-04-28 15:20:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!