1
使用:德爾福XE2,Windows 8的美國英語作爲默認語言印IMAPClient UIDRetrieveAllEnvelopes沒有得到其他字符集正確
我寫的電子郵件客戶端與德爾福。我使用TIdIMAP4通過IMAP連接到Gmail郵箱,並得到這樣的消息列表:
var
MessageList: TIdMessageCollection;
begin
IMAPClnt.SelectMailBox('INBOX');
IMAPClnt.UIDRetrieveAllEnvelopes(IMAPClnt.MessageList);
然後我檢索郵件主題是這樣的:
var
IdMsg: TIdMessage;
s: String
begin
for c := 0 to FIMAPClnt.MessageList.Count - 1 do
begin
IdMsg := FIMAPClnt.MessageList[c];
s := IdMsg.Subject;
但是,如果消息主題使用不同的語言(如希伯來語),則即使在希伯來語設置爲默認Windows語言的計算機上,消息主題也不能正確顯示(請參閱附加圖像)。
如何更正代碼以確保其正常工作,以正確的Unicode字符檢索語言?
截屏:
TIA。
僅供參考,當我去實現這一點,我發現DecodeAddresses需要兩個參數(這是可能的,這是在API中的變化)因此,我最終更改了DecodeAddresses行,如下所示:'DecodeAddresses(IdMsg.FromList.EMailAddresses,IdMsg.FromList);' – 2016-06-29 19:56:51
我不會建議這種方法。從「EmailAddresses」屬性中讀取時,實際上是生成一個新的字符串值,該值可能與原始值不同。由於'TIdIMAP'已經解析了原始字符串並將其分解爲'FromList',所以最好簡單地遍歷'FromList'項並根據需要單獨解碼它們。 – 2016-06-29 20:15:42
回顧Indy的歷史,從來沒有一個「DecodeAddresses()」的單參數版本,它一直是一個雙參數函數。我不記得我從哪裏得到1參數版本。 – 2016-06-29 20:18:14