C++-CLI/C#和传递unicode 我目前正在编写一个C++程序,它使用了C语言中的API。我需要向这个C#包传递一个unicode符号(然后它将绘制该符号)
不幸的是,文档没有说明托管代码。它给出的C#示例只是: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)
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一起使用即可。