C ++ / CLI Изменение кодировки - PullRequest
1 голос
/ 25 октября 2011

Добрый день, я писал простую программу с использованием Windows API, она написана на C ++ / CLI.Проблема, с которой я столкнулся, заключается в том, что я загружаю библиотеку (.dll) и затем вызываю ее функции.одна из функций возвращает char *.Поэтому я добавляю возвращенное значение в свое текстовое поле

output->Text = System::Runtime::InteropServices::Marshal::PtrToStringAnsi
                   (IntPtr(Function()));

Теперь, как вы можете видеть, это закодировано в ANSI, символ * возвращается, я полагаю, также ANSI (или Windows-1252, сВы, ребята, называете это:>).Исходные данные, которые получает функция в LIBRARY, кодируются в UTF-8, поле байтов переменной длины, оканчивающееся на 0x00.В моей программе много нелатинских символов, так что это беспокоит.Я также попробовал это

USES_CONVERSION;
wchar_t* pUnicodeString = 0;
pUnicodeString = A2W( Function());

output->Text = System::Runtime::InteropServices::Marshal::PtrToStringUni
                   (IntPtr(pUnicodeString));

, используя atlconv.h.Он по-прежнему печатает искаженные / неправильные символы.Таким образом, мой вопрос был бы: могу ли я преобразовать его во что-то вроде UTF-8, чтобы я мог видеть правильный вывод, или символ * теряет необходимую информацию, необходимую для этого?Возможно, поможет изменение исходного кода .dll, но он довольно старый и написан на C, поэтому я не хочу с ним связываться: / Я надеюсь, что предоставленной мной информации было достаточно, если вам нужно что-то еще, просто спросите.

1 Ответ

1 голос
/ 25 октября 2011

Как я знаю, не существует стандартного способа обработки UTF-8. Попробуйте в Google соответствующие конвертеры, например. http://www.nuclex.org/articles/cxx/10-marshaling-strings-in-cxx-cli, Преобразование из указателя C ++ / CLI в собственный указатель C ++ .

Кроме того, ваш второй фрагмент кода не использует pUnicodeString, он выглядит неправильно.

...