在托管 C++ 中将中文错误消息转换为 String^

Convert chinese error message to String^ in managed C++

我有一个来自一家名为 CTP 的公司的 dll,它允许我在中国交易所进行交易。它在 C++ 中,我的应用程序在 C# 中...我已经能够将使用托管 C++ 的代码编写到 link 到 dll,并将字符串 (ascii) 和其他参数从 C# 转换到 dll 或从 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 的公司的名称。

但是,我想不通后面的汉字是怎么编码的。有什么想法吗?

Ok... 所以编码是 GB18030 或 "code page"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;
}