C++;DLL特殊字符 我将从程序中生成的用户字符串发送到我正在制作的C++ DLL函数中。它工作正常,直到我发送一个类似“åäö”的字符串。我的函数如下所示: export void showMessage(char* str) { MessageBox(NULL, str, "DLL says", MB_OK); }

C++;DLL特殊字符 我将从程序中生成的用户字符串发送到我正在制作的C++ DLL函数中。它工作正常,直到我发送一个类似“åäö”的字符串。我的函数如下所示: export void showMessage(char* str) { MessageBox(NULL, str, "DLL says", MB_OK); },c++,non-ascii-characters,C++,Non Ascii Characters,当程序发送“åäö”时,会弹出一条带有“ÃÃÃÃÃè”的消息。如何将其转换为“åäö”?需要什么图书馆?我正在为DLL使用Code::Blocks。您正在使用的字符似乎在扩展ASCII表中(值大于127),并且将取决于您正在使用的代码页,这是一种不可移植的方法,因为运行代码的系统需要在程序本身之外进行环境更改 不要使用MessageBox,而是使用启用Unicode的版本,MessageBoxW,并查找指定字符的Unicode编码 参考资料 Unicode版本和ANSI版本的函数,访问日期2

当程序发送“åäö”时,会弹出一条带有“ÃÃÃÃÃè”的消息。如何将其转换为“åäö”?需要什么图书馆?我正在为DLL使用Code::Blocks。

您正在使用的字符似乎在扩展ASCII表中(值大于127),并且将取决于您正在使用的代码页,这是一种不可移植的方法,因为运行代码的系统需要在程序本身之外进行环境更改

不要使用
MessageBox
,而是使用启用Unicode的版本,
MessageBoxW
,并查找指定字符的Unicode编码

参考资料


  • Unicode版本和ANSI版本的函数,访问日期2014-06-06
  • ASCII表格查找,访问日期2014-06-06
  • Unicode查找,访问日期2014-06-06

  • 没有理由让
    str
    成为
    char*
    而不是
    const char*
    。像这样的函数不允许做
    str.c_str()
    作为参数,这是没有充分理由的。如果您想要Unicode字符,您应该使用广泛版本的
    MessageBox
    ,这确实是utf-8。不是MessageBoxA()所需的系统代码页或MessageBoxW()所需的utf-16字符串。使用MultiByteToWideString()使后一种方法有效。