Internationalization 在FPC/Lazarus中使Indy返回utf-8字符串而不是ansi字符串?

Internationalization 在FPC/Lazarus中使Indy返回utf-8字符串而不是ansi字符串?,internationalization,indy,lazarus,freepascal,indy10,Internationalization,Indy,Lazarus,Freepascal,Indy10,是否有任何编译器指令或预处理器命令需要以特定方式设置,以使Indy返回Utf-8字符串,而不是将其截断为Ansi字符串?我正在处理的项目有各种各样的Delphi模式标志,如果这很重要的话 如果我直接将主题行设置为下面这样的UTF-8字符串,它会正确地显示在GUI上,因此UTF-8支持设置正确,并且我使用了适当的字体和所有这些好东西。在这段代码中,为了清楚起见,主题被声明为Utf8String MailItem.主题:=‘îņŘŃЙǟŜũƥĵεϿד’//正确显示 然而,如果我从标题中提取相同的主题

是否有任何编译器指令或预处理器命令需要以特定方式设置,以使Indy返回Utf-8字符串,而不是将其截断为Ansi字符串?我正在处理的项目有各种各样的Delphi模式标志,如果这很重要的话

如果我直接将主题行设置为下面这样的UTF-8字符串,它会正确地显示在GUI上,因此UTF-8支持设置正确,并且我使用了适当的字体和所有这些好东西。在这段代码中,为了清楚起见,主题被声明为Utf8String

MailItem.主题:=‘îņŘŃЙǟŜũƥĵεϿד’//正确显示

然而,如果我从标题中提取相同的主题行,使用Indy对其进行解码,我会将每个国际字符替换为一个问号,确切的字符数。看起来它正在将UTF-8转换为ANSI,这不是我想要的

MailItem.Subject:=IdCoderHeader.DecodeHeader'=?utf-8?B?w67FhsWiw6vFlcWDw6/Ds9CZx5/FgSDFnMWpxqXEtc61z7/Xkw==?='//显示“????????????????????”

那么,可能出现什么问题和/或我如何解决


我使用的是Indy网站上最新版本的Indy10和Windows上的Lazarus 1.0,所以我认为这不是我的软件需要更新的错误,我认为这可能是某种配置问题

否,没有可以为此设置的编译器标志

Indy在D2009之前在Delphi中使用AnsiString,在3.0之前在FreePascal中使用AnsiString。Indy在Delphi 2009+和FreePascal 3.0+中使用UnicodeString。没有办法改变这一点


但是,在Delphi和FreePascal的非Unicode版本中,在Indy的某些地方,您可以指示Indy将AnsiString输入值解释为UTF-8,并返回UTF-8编码的AnsiString输出。但是,DecodeHeader不是这些位置之一。

不,没有可以为此设置的编译器标志

Indy在D2009之前在Delphi中使用AnsiString,在3.0之前在FreePascal中使用AnsiString。Indy在Delphi 2009+和FreePascal 3.0+中使用UnicodeString。没有办法改变这一点

但是,在Delphi和FreePascal的非Unicode版本中,在Indy的某些地方,您可以指示Indy将AnsiString输入值解释为UTF-8,并返回UTF-8编码的AnsiString输出。然而,DecodeHeader不是这些地方之一