我在我的应用程序中嵌入mono,但是我遇到了mono的字符串转换问题。
C ++代码:
static inline void p_Print(MonoString *str) {
cout << "UTF8: " << mono_string_to_utf8(str) << endl;
wcout << "UTF16: " << ((wchar_t*)mono_string_to_utf16(str)) << endl;
}
//...
mono_add_internal_call("SampSharp.GameMode.Natives.Native::Print", (void *)p_Print);
C#代码:
[MethodImpl(MethodImplOptions.InternalCall)]
public static extern void Print(string msg);
//...
Print("characters like \u00D6 are working? (should be an O with \" above it)");
输出:
UTF8: characters like Ö are working? (should be an O with " above it)
UTF16: characters like Í are working? (should be an O with " above it)
正如你所看到的,输出不是它应该打印的,它应该是打印“像Ö正在工作的字符?(应该是一个带有”它上面的“)”,但是mono_string_to_utf8或_to_utf16都没有做它应该做的事情做。
我该如何解决这个问题?
答案 0 :(得分:1)
解决方法如下:
string mono_string_to_string(MonoString *str)
{
mono_unichar2 *chl = mono_string_chars(str);
string out("");
for (int i = 0; i < mono_string_length(str); i++) {
out += chl[i];
}
return out;
}
可能不是最美好的方式,但它有效。