【发布时间】:2021-01-15 07:55:46
【问题描述】:
如何将 memo.text 转换为 UTF-8 并通过 TIdMessage 组件发送到我的电子邮件?我使用了这个功能,但是它不能正常工作...
function TForm1.EncodeAsUTF8(UnicodeStr: string): AnsiString;
var
UTF8Str: UTF8String;
i: Integer;
begin
UTF8Str := UTF8String(UnicodeStr);
SetLength(Result, Length(UTF8Str));
for i := 1 to Length(UTF8Str) do
Result[i] := AnsiChar(Ord(UTF8Str[i]));
end;
【问题讨论】:
-
使用
TEncoding.UTF8.GetBytes()。您不会将 UTF8 存储在AnsiString中。 -
非常感谢您的回复,但还是不行。我有一个备注字段,其中一个值是 ''Kontož'',当我将该字符串发送到我的电子邮件时,我会收到它作为 ''Konto??''。
-
@Pekkala 这部分是因为 RTL 不知道您的
AnsiString是 UTF-8 编码的,所以当它被分配给其他字符串时会执行错误的转换,例如在您的电子邮件代码中。但是你为什么要使用 UTF-8 编码的AnsiString呢?为什么在准备发送电子邮件的原始字节时,您的电子邮件代码不采用正常的strings 并将转换处理为 UTF-8? -
TEncoding.UTF8.GetBytes()有效。什么不起作用是你接下来用它做什么。我们不知道。您谈论将字符串发送到电子邮件。我们对此一无所知。 -
我还记得 Lazarus 标签,因为它与 Delphi XE7 不符。尽量准确地标记您的标签。
标签: delphi delphi-xe7