c++ - 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 文件中,它们已经被宠坏了,所以解决方案应该是我还不知道的编译器开关......
欢迎任何好的想法。
解决方案
这可能取决于您的源文件的编码(正如 VZ 所暗示的那样) - 我正在开发 wxWidgets C++ 应用程序,其中包含一些类似于德语变音符号的非英语(例如 - ć)字符,以解决偶尔的显示问题。我在 Notepad++ 中打开了我的源文件以查看我的源文件的编码,它显示编码是 ANSI:
当这个文件被编译(在 MSVC 中)时,它在应用程序中产生了正确的显示:
但是当在 Notepad++ 中我将编码转换为 UTF-8 时,在源文件中它仍然显示正确:
我使用从 ANSI 转换为 UTF-8 的编码保存文件并编译但在该应用程序显示错误字符之后:
我建议您使用 Notepad++ 并进行类似的实验,并尝试找出您正在使用的编码以及您应该在源文件中使用的编码(可能它应该是编译器所期望的编码,正如 VZ 所暗示的那样)。
在我的情况下,如果字符串被限制在其中似乎并没有那么重要_()
-wxT()
只要源文件的编码正确,我就能够在编译时获得正确的显示。
推荐阅读
- android - Would it be possible to use activites and fragments with bottomNavigation?
- android - 在 Android MVVM 架构的存储库中执行数据库读取操作
- javascript - dynamically fill a json variable
- sql - dblink 过程中出现无效标识符,当我将列添加到表时它变得无效
- r - Height conversion in R
- sql - 唯一约束的可用性
- frama-c - Why Eva plugin of Frama-c return unkown when it acctually found a counter example of an assertion
- java - JAVA 8 : need to perform List iteration in stream and convert list of another object
- android - The "ConvertResourcesCases" task failed unexpectedly. Xamarin Android build
- javascript - Object.create not creating properties