C++-CLI/C#和传递unicode 我目前正在编写一个C++程序,它使用了C语言中的API。我需要向这个C#包传递一个unicode符号(然后它将绘制该符号)

C++-CLI/C#和传递unicode 我目前正在编写一个C++程序,它使用了C语言中的API。我需要向这个C#包传递一个unicode符号(然后它将绘制该符号),c#,.net,visual-c++,unicode,c++-cli,C#,.net,Visual C++,Unicode,C++ Cli,不幸的是,文档没有说明托管代码。它给出的C#示例只是: String text = "\u2197\u2300\u21A7"; 但是当我在C++中尝试这样做时: String^ convertedText= gcnew String("\u2313"); 我得到一个错误: "Character represented by universal-character-name "\u2313" cannot be represent in the current code page (1252)

不幸的是,文档没有说明托管代码。它给出的C#示例只是:

String text = "\u2197\u2300\u21A7";
但是当我在C++中尝试这样做时:

String^ convertedText= gcnew String("\u2313");
我得到一个错误:

"Character represented by universal-character-name "\u2313" cannot be represent in the current code page (1252)"

我不太确定如何着手解决这个问题。有人有什么建议吗?

< P> C++/CLI仍然是C++ + SO代码>“这个字符串”< /Code >不是Unicode(默认为C++)。只需添加
L
前缀,如下所示:

String^ convertedText = gcnew String(L"\u2313");
或者简单地说:

String^ convertedText = L"\u2313";
<>参见MSDN,用于C++引用和C引用。在您的情况下,这些表示相当于原始C#字符串
“\u2197\u2300\u21A7

L"\u2197\u2300\u21A7"
L"\x2197\x2300\x21A7"
L"↗⌀↧"

<代码> \U/COD>可以用来指定Unicode代理和修改器,对于简单的字符,你可以使用<代码> \x< /代码>。<> p> C++ +CLI仍然是C++ +“代码>”。这个字符串“< /Code >不是Unicode(默认为C)),只需添加<代码> L< /Code >前缀,如下:

String^ convertedText = gcnew String(L"\u2313");
或者简单地说:

String^ convertedText = L"\u2313";

参见C++中的MSDN和C参考文献。在这种情况下,这些表示等价于原来的C字符串<代码> > U2197\U23 00 \ U21A7 < /代码>:

L"\u2197\u2300\u21A7"
L"\x2197\x2300\x21A7"
L"↗⌀↧"

\u
可用于指定Unicode代理和修饰符,对于简单字符,也可以使用
\x

将其设置为宽字符串文字(
L“\u2313”
)有效吗?嗯,这很奇怪。它似乎确实起作用了。对于2313,它显示一个正方形,我想这是某种东西,但不是它应该是什么。对于2300,它不显示任何内容。将其设置为宽字符串文字(
L“\u2313”
)有效吗?嗯,这很奇怪。它似乎确实起作用了。对于2313,它显示一个正方形,我想这是某种东西,但不是它应该是什么。对于2300,它不会显示任何内容。嗯,如果我使用大写字母U,它会给我一个错误,说它是“一个格式错误的通用字符名”(它会识别出这是unicode,所以这是进步!)。哦,我尝试实际使用的是2300,并不是说它真的有什么不同。@Incredidave抱歉,
\U
代表UTF-16,
\U
代表UTF-8。是的,我注意到在你链接的文章中。此外,如果你不必指定Unicode代理,只需将L“”与\x.Hmm一起使用,如果我使用大写U,它会给我一个错误,说它是“格式不正确的通用字符名”(它认识到这是unicode,所以这是进步!)。哦,实际上我想用的是2300,并不是说它真的会有什么不同。@Incredidave抱歉,
\U
代表UTF-16,
\U
代表UTF-8。是的,我注意到在你链接的文章中。此外,如果你不必指定Unicode代理,只需将L“”与\x一起使用即可。