如何解决字符编码不一致Win32 API
我正在使用 C++ 开发 Win32 桌面应用程序,其中目标语言是瑞典语。因此,我依靠 Unicode 来正确格式化和显示任何给定的字符串。但是,我遇到了一个非常奇怪的问题,即由非英文字符(例如å、ä、ö)组成的字符串在代码的一部分中起作用,但在代码的另一部分中中断。
更具体地说,代码在一个文件中有效,但在另一个文件中无效。如果我将代码块移动到另一个文件,则文本会再次正确显示。请参见以下示例:
CreateWindowW(L"Button",L"Lägg till kund",WS_TABSTOP | WS_VISIBLE | WS_CHILD,80,25,windowHandle,(HMENU)0,NULL,NULL);
AppendMenu(m_MainMenuBar,MF_POPUP,(UINT_PTR)m_ArkivMenu,L"&Arkiv");
AppendMenu(m_MainMenuBar,(UINT_PTR)m_VisaMenu,L"&Visa");
AppendMenu(m_MainMenuBar,L"&Hjälp");
AppendMenu(m_MainMenuBar,L"&Sök");
所有这些结果如下:
请注意,从 Window.cpp 调用的代码会生成带有无效字符的文本,这表明找不到符号。这很奇怪,因为如果我将代码从 Window.cpp 移动到 Application.cpp,问题就不存在了。
因此,唯一合乎逻辑的结论是这两个文件的字符编码必须不同,但为什么呢?
解决方法
问题确实是,正如标题所说,“字符编码不一致”。
准确地说,这是Window.cpp
的字符编码与Application.cpp
的字符编码相比。我怀疑环境是Visual Studio,它可以处理多种编码的文件。但是对于包含 Unicode 的源代码,您可能希望使用带有“签名”(BOM)的 UTF-8。
这可通过“另存为”在 Visual Studio 2017+ 中使用,并在该保存对话框中选择 "Save With Encoding" 而不是简单的“保存”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。