C ++ DLL специальные символы

0

Я отправляю пользовательскую строку из моей программы в DLL-функцию C++, которую я создаю. Он отлично работает, пока я не отправлю строку вроде "åäö". Моя функция выглядит примерно так:

export void showMessage(char* str) {
    MessageBox(NULL, str, "DLL says", MB_OK);
}

Когда "åäö" отправляется из программы, появляется сообщение "à ¥ äö". Как преобразовать его в "åäö"? Какая библиотека нужна? Я использую Code :: Blocks для DLL.

  • 1
    Нет причин делать str char * вместо const char * . Именно такие функции запрещают делать str.c_str() в качестве аргумента без веской причины. И вы должны использовать широкую версию MessageBox если вам нужны символы Unicode.
  • 3
    Это действительно UTF-8. Не системная кодовая страница, которая нужна MessageBoxA (), или строка utf-16, которая нужна MessageBoxW (). Используйте MultiByteToWideString (), чтобы последняя работала.
Теги:
non-ascii-characters

1 ответ

2

Используемые вами символы отображаются в расширенной таблице ASCII (значение больше 127) и будут зависеть от используемой кодовой страницы, что является менее переносимым подходом, поскольку система, работающая с вашим кодом, должна внести изменения в среду вне самой программы.

Вместо использования MessageBox используйте версию с поддержкой Unicode, MessageBoxW и найдите кодировки Unicode для указанных вами символов.

Рекомендации


  1. Версии Unicode и версии функций ANSI, доступ к которым можно получить в 2014-06-06, <http://zone.ni.com/reference/en-XX/help/371361J-01/lvexcodeconcepts/unicode_ansi_version_functs/>
  2. ASCII Table Lookup, Accessed 2014-06-06, <http://www.theasciicode.com.ar/extended-ascii-code/capital-letter-a-ring-uppercase-ascii-code-143.html>
  3. Поиск Unicode, доступ к 2014-06-06, <http://unicodelookup.com/>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню