我讀電子郵件印10.6.1.5187和Delphi 7如何避免錯誤的字符閱讀UTF-8封電子郵件,印第安納波利斯10.6和Delphi 7
我只有問題UTF-8編碼的電子郵件,其翻譯成客戶電腦中的錯誤字符。
我已經閱讀了很多關於這個問題的內容,但是我還沒有找到解決方案,除了自己解碼原始郵件。
我想知道當發件人使用UTF-8編碼它們時,是否有辦法獲得正確的電子郵件。
謝謝。
我讀電子郵件印10.6.1.5187和Delphi 7如何避免錯誤的字符閱讀UTF-8封電子郵件,印第安納波利斯10.6和Delphi 7
我只有問題UTF-8編碼的電子郵件,其翻譯成客戶電腦中的錯誤字符。
我已經閱讀了很多關於這個問題的內容,但是我還沒有找到解決方案,除了自己解碼原始郵件。
我想知道當發件人使用UTF-8編碼它們時,是否有辦法獲得正確的電子郵件。
謝謝。
接收到UTF8字符串,就像它是一個Ansi字符串。你必須解碼它。
你必須接收消息文本在UTF8String
(又名。AnsiString
在Delphi 7又名String
),然後從UTF8將它們轉換爲AnsiString
或(優選地)01。您可以使用UFT8Decode()
或Utf8ToAnsi()
函數來解碼電子郵件正文。
如果您使用UFT8Decode()
函數,您仍然需要支持WideString的控件來顯示接收到的消息。
如果使用Utf8ToAnsi()
函數,結果可能不包含不屬於用戶本地代碼頁的字符。
所以,你會使用類似:
var
ustrEmailBody: UTF8String;
wstrDecoded: WideString;
begin
...
// ustrEmailBody now contains the email body
wstrDecoded := UTF8Decode(ustrEmailBody);
SomeUnicodeAwareMemo.Text := wstrDecoded;
或
var
ustrEmailBody: UTF8String;
astrDecoded: AnsiString;
begin
...
// ustrEmailBody now contains the email body
wstrDecoded := UTF8Decode(ustrEmailBody);
SomeMemo.Text := astrDecoded; // the memo might display '?' in place of unknown characters
欲瞭解更多信息,請參閱的UFT8Decode()
或Utf8ToAnsi()
功能的文檔中的德爾福幫助。
在將數據解碼爲UTF-8之前,確保電子郵件的字符集實際上使用UTF-8。並非世界上每個人都使用UTF-8。 – 2014-09-23 00:18:41
@RemyLebeau - 我的回答直接解決了問題中提到的問題。約翰寫道:「我只有UTF-8編碼的電子郵件存在問題,這會在客戶計算機中轉化爲錯誤的字符。」_ – mg30rg 2014-09-23 09:17:48
我們需要看到更多細節。爲了提出解決方案,我相信我們首先需要診斷問題。 – 2014-09-22 12:29:15