我们写了一个Delphi程序,用CDO发送一些信息。
在我的Win7机器(匈牙利语)中,口音可以正常工作。
因此,如果我发送了一封邮件,使用的是“anéviedÓÖŐäŰ”,我收到的邮件格式是这样的。我在正文中使用了iso-8859-2编码,这将主题和电子邮件地址编码到(发送者地址是包含姓名)。
我以为我已经做完了。
但是,当我尝试从Win2k3英语机器(邮件服务器是相同的!)发送邮件时,结果是截断一些重音:Ű=UŐ=O
接下来,我尝试在这里使用UTF-8编码。
这提供了口音-但是错误的口音。
邮件包含带有^符号的重音符号。
é<>é
这不是有效的匈牙利字母...:-(
所以我想知道,如何将输入转换或设置为我得到了好的结果。
我试着把身体记录下来看看有什么变化...
Log(SBody);
Msg.Body := SBody;
Log(Msg.Body);..。或者不是。
但是这些日志提供了很好的结果,输入也很好。
所以它有可能在CDO上丢失和错误转换生成消息。
如果我可以将ANSI文本编码成真正的UTF,我可以帮助CDO。但是在Delphi中,转换器函数没有"CodePage“参数。在Python中,我可以这样说:
s.encode('iso-8859-2')或
s.decode('iso-8859-2')但在Delphi中我看不到这个参数。
有谁知道,如何保留重音,如何转换带重音的匈牙利字符串以保留它们的重音格式?
我想知道,我可以不用发送邮件就可以检查结果吗?
感谢您的帮助: dd
发布于 2010-09-07 20:26:07
用"delphi string codepage“在谷歌上快速搜索一下,我就找到了torry's delphi pages,也许下面的代码片段(找到的)可以帮助解决你的问题:
{:Converts Unicode string to Ansi string using specified code page.
@param ws Unicode string.
@param codePage Code page to be used in conversion.
@returns Converted ansi string.
}
function WideStringToString(const ws: WideString; codePage: Word): AnsiString;
var
l: integer;
begin
if ws = ' then
Result := '
else
begin
l := WideCharToMultiByte(codePage,
WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,
@ws[1], - 1, nil, 0, nil, nil);
SetLength(Result, l - 1);
if l > 1 then
WideCharToMultiByte(codePage,
WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,
@ws[1], - 1, @Result[1], l - 1, nil, nil);
end;
end; { WideStringToString }
{:Converts Ansi string to Unicode string using specified code page.
@param s Ansi string.
@param codePage Code page to be used in conversion.
@returns Converted wide string.
}
function StringToWideString(const s: AnsiString; codePage: Word): WideString;
var
l: integer;
begin
if s = ' then
Result := '
else
begin
l := MultiByteToWideChar(codePage, MB_PRECOMPOSED, PChar(@s[1]), - 1, nil, 0);
SetLength(Result, l - 1);
if l > 1 then
MultiByteToWideChar(CodePage, MB_PRECOMPOSED, PChar(@s[1]),
- 1, PWideChar(@Result[1]), l - 1);
end;
end; { StringToWideString }--莱因哈德
https://stackoverflow.com/questions/3641173
复制相似问题