2012-10-09 49 views
2

是否有任何編譯器指令或預處理器命令需要以特定的方式設置,以使Indy返回Utf-8字符串而不是將它們截斷爲Ansi字符串?如果有問題,我正在處理的項目有各種各樣的Delphi模式標誌。讓Indy在FPC/Lazarus中返回utf-8字符串而不是ansi字符串?

如果我直接將主題行設置爲UTF-8字符串(如下所示),它會在GUI上正確顯示,因此utf-8支持設置正確,我使用的是合適的字體和所有這些東東。爲了清晰起見,主題被聲明爲Utf8String。

MailItem.Subject := 'îņŢëŕŃïóЙǟŁ ŜũƥĵεϿד'; //Displays correctly

但是,如果我拉頭中的相同主題行,用印地對其進行解碼,我讓每一個國際性質恰好與一個問號所取代,應該成爲的人物正是數。看起來它將UTF-8轉換爲ANSI,這不是我想要的。

MailItem.Subject := IdCoderHeader.DecodeHeader('=?utf-8?B?w67FhsWiw6vFlcWDw6/Ds9CZx5/FgSDFnMWpxqXEtc61z7/Xkw==?='); //Displays '?????????? ???????'

那麼事情可能會錯誤和/或如何解決呢?

我使用Indy網站的Indy10和Windows上的Lazarus 1.0的最新版本,所以我不認爲這是「我的軟件需要更新」的錯誤,我認爲這可能是某種配置問題。

回答

0

不,沒有可以爲此設置的編譯器標誌。 Indy在FPC和2009年之前版本的Delphi中使用AnsiString,並且在Delphi 2009+中使用UnicodeString。沒有辦法改變這一點。但是,在FPC和非Unicode Delphi中,在某些地方,您可以指示Indy將AnsiString輸入值解釋爲UTF-8,並返回UTF-8編碼的AnsiString輸出。但是,DecodeHeader()不是其中之一。

相關問題