2014-04-25 118 views
0

我有TIdMessage與文本或HTML部分,並希望保存它 - 保持不變。避免轉換TIdText編碼

目前我的代碼確實是這樣的:

static_cast<TIdText*>(IdMsg->MessageParts->Items[0])->Body->SaveToFile("file.htm"); 

工作正常,但有一個問題。在消息的一部分中,有一個引用的可打印編碼,如下所示:=C4=87 - 這是用於ć字母的UTF-8代碼。然而,Indy將它轉換爲E6,這是相同的字母,但在中歐編碼(它可能是它從Windows設置中選擇目標)。所以轉換是可以的,但我更願意以未修改的形式保存TIdText附件 - 保留原始編碼。

TIdText的編碼是UTF-8,HTML也包含UTF-8元標記。

有一種方法,以:

一個)保持原始編碼 - 保存爲「原始」數據只用編碼轉換爲字節(例如,用於=C4=87保存爲二進制數據C487)。

b)設置特定的編碼,例如,如果我想保存在UTF-8編碼?

回答

1

TIdMessage解析電子郵件時,默認情況下它會將傳輸編碼(引用的可打印等)解碼爲原始字節,然後在內存中將這些字節字符集解碼爲UTF-16。爲了避免這種情況,您必須在加載電子郵件之前將TIdMessage::NoDecode設置爲true,但是您將不能再使用TIdMessage::MessageParts。在任何情況下,原始字節無論如何都不會得到,因爲TIdMessage主要處理String數據。

Body->SaveToFile(...)被調用標準VCL TStrings::SaveToFile(),使用操作系統的默認編碼節省了TString數據,除非你明確地在其Encoding參數指定一個不同的編碼,如:

static_cast<TIdText*>(IdMsg->MessageParts->Items[0])->Body->SaveToFile("file.htm", Sysutils::TEncoding::UTF8);