使用 CListCtrl 显示 UTF-8 字符

using CListCtrl to display utf-8 characters

本文关键字:字符 UTF-8 显示 CListCtrl 使用      更新时间:2023-10-16

我试图在过去几个小时的CListCtrl中显示文本,但没有成功。我正在使用std::ifstream从.txt使用utf-8填充CListCtrl的文件读取。

"项目属性->字符"集是"未设置",我无法将其更改为使用 Unicode,这是一个最初不是我编写的旧项目。

此外,从 UTF-8 到 ANSI 的转换也不起作用,我无法使用提升库。当我阅读时,CListCtrl不支持 UTF-8。

我很高兴听到任何可能有效的解决方案,扩展CListCtrl替换旧解决方案等。我正在使用VS2010,.NET4.

您需要使用列表视图 API 的 Unicode 版本(例如 LVM_SETITEMW)。MBCS 版本的 MFC 调用 Windows API 的 ANSI 版本,这些 API 可能无法在文件中显示某些 Unicode 字符。

这意味着,例如,

如果要更改项目,则需要发送带有 LVITEMW 结构的LVM_SETITEMW消息。如果要更改许多列表控件,则可以使用 MFC 的代码作为参考编写 CListCtrlW 类。LVITEMW 希望字符串为 UTF-16,因此您需要将字符串数据转换为 UTF-16。您可以通过 MultiByteToWideChar 或 CA2W 和 CP_UTF8 代码页执行此操作。此外,如果您使用的字体无法处理输入中的某些 Unicode 字符,则需要更改字体。

如果需要在 UI 中有很多位置来处理 Unicode 输入,您可以尝试将业务逻辑的 ANSI 部分移出到 DLL,然后将主 exe 项目更改为 Unicode。