微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

字符编码不一致Win32 API

如何解决字符编码不一致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);

-从 Application.cpp 文件调用

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 文件调用

所有这些结果如下:

Calling code from different headers

请注意,从 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?