【发布时间】:2021-07-01 20:39:36
【问题描述】:
我正在使用 C++ 开发一个 Win32 桌面应用程序,目标语言是瑞典语。因此,我依靠 Unicode 来正确格式化和显示任何给定的字符串。但是,我遇到了一个非常特殊的问题,即由非英语字符(例如å、ä、ö)组成的字符串在代码的一部分中工作,但在代码的另一部分中中断。
更具体地说,代码在一个文件中有效,但在另一个文件中无效。如果我将代码块移动到另一个文件,则文本会再次正确显示。请参阅以下示例:
CreateWindowW(L"Button", L"Lägg till kund", WS_TABSTOP | WS_VISIBLE | WS_CHILD,
0, 0, 80, 25, windowHandle, (HMENU)0, NULL, NULL);
-从 Application.cpp 文件中调用。
AppendMenu(m_MainMenuBar, MF_POPUP, (UINT_PTR)m_ArkivMenu, L"&Arkiv");
AppendMenu(m_MainMenuBar, MF_POPUP, (UINT_PTR)m_VisaMenu, L"&Visa");
AppendMenu(m_MainMenuBar, MF_POPUP, (UINT_PTR)m_ArkivMenu, L"&Hjälp");
AppendMenu(m_MainMenuBar, MF_POPUP, (UINT_PTR)m_ArkivMenu, L"&Sök");
-从 Window.cpp 文件中调用。
所有这些都会导致以下结果:
请注意,从 Window.cpp 调用的代码会生成包含无效字符的文本,这表明无法找到符号。这很奇怪,因为如果我将代码从 Window.cpp 移动到 Application.cpp,问题就不复存在了。
因此,唯一合乎逻辑的结论是这两个文件之间的字符编码必须不同,但为什么呢?
【问题讨论】:
-
也许你可以在这里找到答案:stackoverflow.com/questions/22893226/…
-
很难说为什么它是不同的。这是由您创建和/或保存文件的方式引起的。