问题背景:

在cursor编译器中AI生成的代码在VS2022中运行报错,报错如下

warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失

error C2065: “m_Clients”: 未声明的标识符

解决过程

1.调换了一下头文件的引用顺序 

//原先的
#include "pch.h"
#include "framework.h"
#include "MFCAPP.h"
#include "MFCAPPDlg.h"
#include "GameServer.h"

//修改后的
#include "pch.h"
#include "framework.h"
#include "GameServer.h"
#include "MFCAPP.h"
#include "MFCAPPDlg.h"

将声明了m_Clients的头文件提到了前面,但没有解决问题

2.更改文件编码格式为Unicode

更改文件编码格式的方式有很多,可以在VS中的高级保存选项中更改文件的保存格式为Unicode,这里放一个参考链接:warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失-CSDN博客

也可以用其他编辑器打开(记事本、Notepad之类的),然后更改编码格式,我用的就是这个方法。

更改完文件格式之后确实也能正常运行了。。。但新出现了问题

cursor中乱码

运行完之后打开cursor想继续开开心心用AI改代码,打开一看天塌了:)

新问题解决

点击右下角中的编码格式”UTF-8“

在弹出来的选项中选择”Save with Encoding“

编码格式选择UTF-16 LE

这样就可以在cursor正常显示的同时,也能在VS中正常编译了~

PS:如果你发现你的程序在运行的时候弹出的文字是乱码的,而你的代码文件里显示的又是正常的,可以考虑一下编码格式错误的原因。

总结

这次错误主要是编码格式引起的,对看到的几篇介绍编码格式的文章做一个小总结

1.为什么使用UTF-16编码格式,就可以在VS中正常编译了?

Windows 内部广泛使用 UTF-16 LE(如系统 API、.NET 字符串),因其对 Unicode 字符的高效处理,即UTF-16 是 Windows 内核的默认编码,编译器也能识别

2.为什么VS不支持UTF-8,UTF-8 with bom与UTF-8有什么区别

早期 Windows 系统默认使用 ANSI 编码(如 GBK、Shift-JIS),而 UTF-8 无 BOM 文件可能被误判为 ANSI,因此不支持该编码格式。

UTF-8 with bom相比于UTF-8只有在文件头部多了一段3 字节文件头,属于微软的非标准编码,在开发中容易引起问题,但windows的记事本默认保存编码格式就是UTF-8 with bom

Unicode、UTF-8、UTF-16,终于懂了_保存文件夹utf-16,utf-8是什么区别-CSDN博客

UTF-8与UTF-8(BOM)区别和一些说明_utf-8 bom-CSDN博客

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐