【问题标题】:Delphi version 2007 reading Cyrillic email with TIdMessageDelphi 2007 版阅读带有 TIdMessage 的西里尔文电子邮件
【发布时间】:2018-11-02 11:25:48
【问题描述】:

我们已经构建了一个电子邮件服务,可以读取电子邮件(来自 IMAP)并将它们放入数据库中的表中。它适用于德语/英语文本,但现在我想获取所有其他电子邮件,比如西里尔文或中文。但是我收到的字符是这样的:поново теŃтирам 甚至只是?????。

我们使用 ADO 对象将数据存储在数据库中,这些字段的列类型声明为 nvarchar,用于上传该数据的存储过程的参数也是 nvarchar。

我认为这是 Delphi 2007 的问题,但我仍然在一些帖子上看到 Delphi 2007 支持 Unicode(如果我需要 Unicode)。那么,有人知道如何使用 Cyrillic 阅读电子邮件并将其存储在 mssql 表中吗?

要从 IdMessage 获取文本,我使用的是 IdMessage.Body.Text

谢谢, 德让

INDY 版本是 10.1.5

【问题讨论】:

  • 你设置IdMessage.Charset := 'Windows-1251'了吗?
  • 字符集是 UTF-8
  • 您使用的是严重过时的 Indy 版本,需要升级。当前版本是 10.6.2。现代版本有更好的 Unicode 处理。无论如何,D2007 不是 Unicode 版本(你需要 D2009+)所以所有的字符串都是 ANSI,它不能处理像中文这样真正需要 Unicode 的语言
  • 谢谢 Remy,但我正在开发一个很大的应用程序,并且已经建立在那个版本的 Indy 上,我们已经尝试升级它,但后来我们把自己弄得一团糟

标签: delphi delphi-2007


【解决方案1】:

我已经设法通过使用 UTF8Decode 函数使其工作。

我已经使用 UTF-8 和 ANSI 字符集对其进行了测试,它在这两种情况下都有效(当然 ANSI 会在 Unicode 字符的位置产生 ?)。

将 BodyText 和主题声明为 WideStrings

然后使用:

BodyText := UTF8Decode(IdMessage.Body.GetText)

【讨论】:

  • 如果您还有其他问题要问,那将是一个新问题。不要在答案中提出新问题。
猜你喜欢
  • 1970-01-01
  • 2012-10-08
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
相关资源
最近更新 更多