无法使用 Unicode 特殊字符设置窗口文本

Cannot set window text with Unicode special char

本文关键字:设置 窗口 文本 特殊字符 Unicode      更新时间:2023-10-16

>我正在尝试使用下面指定的 unicode 特殊字符的代码设置对话框项文本:

https://www.fileformat.info/info/unicode/char/1f310/index.htm

我一直在尝试调用 SetWindowTextW 函数,将 UTF-16(十六进制)值作为参数传递,但没有成功:

GetDlgItem(IDSETTINGS)->SetWindowTextW(_T("uD83CuDF10"));

当我构建解决方案时,我遇到了两个错误:

错误 C3850:"\uD83C"universal-character-.name 指定了无效字符

错误 C3850:"\uDF10"指定无效字符的 universal-character-.name

我将不胜感激任何形式的帮助。

在这种情况下,编译器错误 C3850 的原因可以在参考中找到(强调我的):

表示为通用字符名称的字符必须表示 0-10FFFF 范围内的有效 Unicode 码位。普遍的性格 name不能包含 Unicode 代理项范围 D800-DFFF 中的值, 或编码的代理项对。编译器生成代理项 从有效代码点自动配对。

使用 UTF-32 码位对我有用:

GetDlgItem( IDSETTINGS )->SetWindowTextW( L"U0001F310" );

如果您确保源文件以 Unicode 编码存储,您也可以从字面上将字符存储在源文件中,我建议将 UTF-8 与 BOM 一起使用。

GetDlgItem( IDSETTINGS )->SetWindowTextW( L"  " );

请注意,在使用W(Unicode) API 时,切勿使用_T()宏或_TEXT()宏。这些宏根据预处理器变量更改字符串文本的类型,而 Unicode API 始终需要宽字符串,这是通过使用字符串文本的L前缀强制执行的。