【问题标题】:German characters are displayed incorrectly with SetDlgItemText使用 SetDlgItemText 无法正确显示德语字符
【发布时间】:2013-12-23 02:16:41
【问题描述】:

我用 C++ 从一个 sqlite 数据库中读取了一个德语文本(文本在数据库查看器中看起来不错)。但是当我在带有 SetDlgItemText 的对话框中显示它时,文本看起来像这样(见图)。

    CString strWarning(pStmt->GetColumnCString(nCol));      
    SetDlgItemText(IDC_WARNING_MESSAGE, strWarning);

【问题讨论】:

  • 返回的字符串显然是 UTF-8 编码的,Windows 函数需要基于代码页的 ASCII(已弃用)或 16 位 wchar 字符串(启用 Unicode,这实际上可能是默认设置今天)。

标签: c++ sqlite encoding mfc codepages


【解决方案1】:

您的字符串看起来被编码为 UTF-8,Windows 无法处理。

您需要将其转换为 UTF-16 并确保调用 SetDlgItemText 的宽版本,方法是将项目的字符集选项更改为 Use Unicode Character Set 或指定 SetDlgItemTextW

您可以使用 MultiByteToWideChar 函数将字符串从 UTF-8 转换为 UTF-16。

【讨论】:

  • 项目是 unicode,我通过调用 GetColumnString16 解决了这个问题(我使用 Kompex Sqlite 库),这将返回正确的字符串格式:)
  • @Mario "The project is unicode" 在这里无关紧要。问题不在于是否使用 Unicode,而在于 DB 和消费者是否同意相同的字符 encoding
猜你喜欢
  • 1970-01-01
  • 2018-05-19
  • 2010-09-30
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
相关资源
最近更新 更多