У меня есть DLL от компании CTP, которая позволяет мне торговать на китайских биржах. Это на C++, а мое приложение на C# ... Мне удалось написать код, который использует управляемый C++ для связи с dll и перевода строк (ascii) и других параметров из C# в dll и из нее. Единственная проблема - когда я получаю сообщения об ошибках из dll, они на китайском языке. И у меня возникли проблемы с переводом символа *. Я возвращаюсь в действительную строку ^, содержащую хорошие китайские символы.
Например, следующий массив сообщений char *:
43 54 50 3A CE DE B4 CB C8 A8 CF DE 00
используя этот код:
return gcnew String^(message);
Я получаю "ОСАГО: ´ËȨÏÞ".
используя этот код:
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: � � Ȩ��".
Кроме того, когда я пытаюсь запустить эту текстовую строку через онлайн-преобразователи hex -> UTF8, я получаю сообщение об ошибке, что строка utf8 недействительна.
Я очень уверен, что первые четыре символа - это «CTP:», так как это название компании, написавшей dll.
Однако я не могу понять, как кодируются следующие китайские иероглифы. Любые идеи?





Хорошо ... Итак, кодировка - GB18030 или "кодовая страница" 54936 ... поэтому следующий код правильно преобразовал строку. Не уверен, есть ли #define для GB18030 или нет.
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;
}