使用 CListCtrl 显示 UTF-8 字符
using CListCtrl to display utf-8 characters
我试图在过去几个小时的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。
相关文章:
- HEX值到wchar_t字符(UTF-8)的转换
- 转换特殊字符(UTF-8)
- 在C++中使用 UTF-8 字符串和字符
- 在基于英语的系统上将 UTF-8 路径转换为宽字符会引发异常
- 无法将字符数组转换为包含 utf-8 字符的字符串
- 如何在 Visual C++ 中使用 UTF-8 字符串作为字符*?
- 读取UTF-8文件需要解析字符
- 如何正确处理渲染大小为 >= 2B 的 utf-8 字符?
- C++ UTF-8 瑞典语字符读取为 ASCII
- 如何C++ WCOUT UTF-16 编码的字符数组?
- 检查 UTF-8 是wchar_t还是字符?
- Qt UTF-8 文件到 std::string 添加额外的字符
- 字符的 UTF-8 转换
- C Unicode UTF-8解码字符的问题
- 将转义的 UTF-8 八位字节的字符数组转换为 C++ 的字符串
- 如何在没有wchar_t的情况下在 c++ 中解码/编码 UTF-8 字符
- 如何将 utf 字符转换为 windows-1252?
- 在 Linux 中将 UTF-32 宽字符转换为 UTF-16 宽字符以获取补充平面字符
- C 14:UTF-8/UTF-16与本机字符编码之间的转换
- 从键盘读取 UTF-8 编码的字符