在托管 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;
}
我有一个来自一家名为 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;
}