求助:Unicode字符U+0103在ListBox中无法显示,MessageBox显示正常
解决方案
1. 确保项目与ListBox使用Unicode编码
- 打开项目属性,将字符集设置为「使用 Unicode 字符集」(VS路径:配置属性 -> 常规 -> 字符集)
- 创建ListBox时优先使用Unicode版本API(如
CreateWindowW),避免ANSI与Unicode的编码转换丢失字符
2. 为ListBox替换支持扩展拉丁字符的字体
默认系统基础字体(如MS Sans Serif)不包含U+0103这类Latin Extended-A字符,需更换为支持该字符的字体,示例代码如下:
// 创建支持扩展拉丁字符的字体(以Segoe UI为例) HFONT hUnicodeFont = CreateFontW( 12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Segoe UI" ); // 为ListBox设置新字体 SendMessage(hwndListBox, WM_SETFONT, (WPARAM)hUnicodeFont, TRUE);
可选字体还包括Arial Unicode MS、Times New Roman等,均支持U+0103字符。
3. 确认字符串传递的正确性
- 直接使用宽字符字面量(如
L"rom\u00e2n\u0103")传递给LB_ADDSTRING,避免TCHAR在非Unicode模式下的编码转换问题 - 确保
swprintf_s生成的是正确的宽字符字符串,可通过调试查看szBuffer的内存值验证
内容的提问来源于stack exchange,提问作者AutomaticInvest_4
相关产品推荐
相关产品推荐

