我有一个名为CTP的公司的dll,该文件使我可以在中国交易所进行交易。它在C ++中,我的应用程序在C#中。我已经能够编写代码,使用托管C ++链接到dll,并将字符串(ascii)和其他参数从C#转换为dll。唯一的问题是,当我从dll中获取错误消息时,它们是中文。而且我无法将char *转换为包含有效中文字符的有效String ^。
例如,以下char *消息数组:
43 54 50 3A CE DE B4 CB C8 A8 CF DE 00
使用此代码:
return gcnew String^(message);
我得到“ CTP:ÎÞ´ËȨÏÞ”。
使用此代码:
int bufSize = MultiByteToWideChar(CP_UTF8, 0, message, -1, NULL, 0);
wchar_t* wstr = new wchar_t[bufSize];
MultiByteToWideChar(CP_UTF8, 0, message, -1, wstr, bufSize);
String^ val = gcnew String(wstr);
delete[] wstr;
return val;
我收到“ CTP:”。
此外,当我尝试通过在线十六进制运行该文本字符串-> UTF8转换器时,我收到一条错误消息,指出utf8字符串无效。
我非常确定前四个字符是“ CTP:”,因为这是编写dll的公司的名称。
但是,我不知道后面的汉字是如何编码的。有什么想法吗?
答案 0 :(得分:0)
好吧...所以编码为GB18030或“代码页” 54936 ...因此以下代码正确转换了字符串。不知道是否有针对GB18030的#define。
System::String^ CTPTraderWrapper::GetString(char* message)
{
int bufSize = MultiByteToWideChar(54936, 0, message, -1, NULL, 0);
wchar_t* wstr = new wchar_t[bufSize];
MultiByteToWideChar(54936, 0, message, -1, wstr, bufSize);
String^ val = gcnew String(wstr);
delete[] wstr;
return val;
}