首页 > 解决方案 > C++ 中的 wxMenuItem:“äöü”等字符在项目文本中未正确显示

问题描述

我开始将 wxWidgets(版本 3.1.4)用于 Windows GUI 应用程序。使用 MINGW64 附带的 gcc (gcc (x86_64-posix-sjlj-rev0, Built by MinGW-W64 project) 8.1.0) 完成编译和链接。

在源代码中,字符输入正确:

m_menuItem31 = new wxMenuItem(m_name6, wxID_ANY, _("Stückliste drucken"), _("Stückliste drucken"), wxITEM_NORMAL);
m_name6->Append(m_menuItem31);

在应用程序中,它看起来像这样:

屏幕截图菜单文本

经过一些研究,我尝试使用链接器选项 -municode 最终出现错误“没有引用 wWinMain”。#define wxUNICODE 无效。

编辑:预处理后,字符仍然是所需的。在 .o 文件中,它们已经被宠坏了,所以解决方案应该是我还不知道的编译器开关......

欢迎任何好的想法。

标签: c++wxwidgets

解决方案


这可能取决于您的源文件的编码(正如 VZ 所暗示的那样) - 我正在开发 wxWidgets C++ 应用程序,其中包含一些类似于德语变音符号的非英语(例如 - ć)字符,以解决偶尔的显示问题。我在 Notepad++ 中打开了我的源文件以查看我的源文件的编码,它显示编码是 ANSI:

在此处输入图像描述

当这个文件被编译(在 MSVC 中)时,它在应用程序中产生了正确的显示:

在此处输入图像描述

但是当在 Notepad++ 中我将编码转换为 UTF-8 时,在源文件中它仍然显示正确:

在此处输入图像描述

我使用从 ANSI 转换为 UTF-8 的编码保存文件并编译但在该应用程序显示错误字符之后:

在此处输入图像描述

我建议您使用 Notepad++ 并进行类似的实验,并尝试找出您正在使用的编码以及您应该在源文件中使用的编码(可能它应该是编译器所期望的编码,正如 VZ 所暗示的那样)。

在我的情况下,如果字符串被限制在其中似乎并没有那么重要_()-wxT()只要源文件的编码正确,我就能够在编译时获得正确的显示。


推荐阅读