在C#中通过COM互操作编组字符串时编码失败(双UTF8编码?)

在C#中通过COM互操作编组字符串时编码失败(双UTF8编码?),c#,unicode,marshalling,com-interop,autodesk-navisworks,C#,Unicode,Marshalling,Com Interop,Autodesk Navisworks,我正在为Autodesk Navisworks编写一个插件,尝试将C#unicode字符串传递给COM对象上的属性。但是,该字符串在过程中的某个位置编码不正确 var property = ...; property.Name = "中文"; // becomes "??" property.Value = "中文"; // OK "中文" 在用户界面中显示为“?”,而仅限于ASCII的字符串可以正常工作(例如“abcd”)。此外,在同一对象上设置Value属性(变量)也可以正常工作,但不

我正在为Autodesk Navisworks编写一个插件,尝试将C#unicode字符串传递给COM对象上的属性。但是,该字符串在过程中的某个位置编码不正确

var property = ...;
property.Name = "中文";   // becomes "??"
property.Value = "中文"; // OK
"中文" 在用户界面中显示为“?”,而仅限于ASCII的字符串可以正常工作(例如“abcd”)。此外,在同一对象上设置Value属性(变量)也可以正常工作,但不能设置名称

进一步的探索使我尝试将字符串“ä”编码为utf-8:

C3 A4
并以某种方式将其“编码”为(unicode)字符串:

令人惊讶的是,这似乎奏效了

这让我尝试了以下方法:

var bytes = Encoding.UTF8.GetBytes("中文abcd");
char[] chars = new char[bytes.Length];
for(int i = 0; i < chars.Length; i++)
    chars[i] = (char)bytes[i];
string s = new string(chars);
var bytes=Encoding.UTF8.GetBytes(“中文abcd”);
char[]chars=新字符[bytes.Length];
for(int i=0;i
然而,当我用这个来编码“中文“我只得到第一个字符”中在GUI中。然而,使用“abcd”我又得到了不止一个字符


这里发生了什么?我怎样才能避开这个问题?这是一个编组问题(例如,在COM Interop中错误地指定了编码)?还是应用程序内部的一些奇怪的代码?如果是编组问题,我可以仅为此属性修改它吗?

结果是
名称
是一个“内部”属性“字符串,我应该使用属性
UserName
作为GUI中显示的文本

也就是说,我改变了:

var property = ...;
property.Name = "中文";   // becomes "??"
property.Value = "中文"; // OK
为此:

var property = ...;
property.UserName = "中文";   // OK!
property.Value = "中文"; // OK

这起作用了。可能用户名是以某种方式从名称内部隐式设置的,忽略或错误处理了编码。

能否以十六进制转储输出?我想我知道这是怎么回事。。。
var property = ...;
property.UserName = "中文";   // OK!
property.Value = "中文"; // OK