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

Alb*_*cio 4 c c++ unicode mfc

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

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

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

GetDlgItem(IDSETTINGS)->SetWindowTextW(_T("\uD83C\uDF10"));
Run Code Online (Sandbox Code Playgroud)

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

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

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

我会感激任何帮助.

zet*_*t42 8

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

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

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

GetDlgItem( IDSETTINGS )->SetWindowTextW( L"\U0001F310" );
Run Code Online (Sandbox Code Playgroud)

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

GetDlgItem( IDSETTINGS )->SetWindowTextW( L"" );
Run Code Online (Sandbox Code Playgroud)

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

  • 值得注意的是,引发了错误[C3850](https://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-2/compiler-error-c3850),因为有问题的代码尝试编码代理对.*"通用字符名称不能包含Unicode代理范围,D800-DFFF或编码代理项对中的值.编译器会自动从有效代码点生成代理项对."* (2认同)