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

时间:2018-03-06 09:34:40

标签: c++ c unicode mfc

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

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

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

GetDlgItem(IDSETTINGS)->SetWindowTextW(_T("\uD83C\uDF10"));

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

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

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

我会感激任何帮助。

1 个答案:

答案 0 :(得分:8)

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

  

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

使用UTF-32代码点对我有用:

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

如果确保源文件以Unicode编码存储,您也可以将字符存储在源文件中,我建议使用带有BOM的UTF-8。

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

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