卖不甜枣 发表于 2024-5-25 20:32:43

使用EasyX制作游戏需要读写文件时遇到编码问题的解决方法

使用EasyX制作游戏需要读写文件时遇到编码问题的解决方法

一、编码问题

例如我们需要从file.txt中读取笔墨,再使用outtextxy()函数向窗口绘制笔墨。
查找EasyX的官方文档可知,该函数有两个重载,分别为:void outtextxy(int x, int y, LPCTSTR str)和void outtextxy(int x, int y, TCHAR c)。
如果我们的file.txt文件使用GBK或者GB2312编码的话,会导致VS编译器混合utf-8编码和GBK编码,导致程序不能正确绘制笔墨。
编码问题一直是令人头痛的问题,这里给出通用的方法论,希望能够带来一些资助。
二、解决方法

1.重新编码txt文件

首先使用vscode打开file.txt文件,确保文件编码为utf-8。如下图:
https://img2024.cnblogs.com/blog/3453534/202405/3453534-20240525191629179-534008884.png
如果不是utf-8编码,点击选择编码,通过编码重新打开,选择utf-8编码,这时原来的内容会变成乱码,将原来的内容删除,重新输入,保存即可。具体的操纵如下图:
https://img2024.cnblogs.com/blog/3453534/202405/3453534-20240525191919585-1129151937.png
https://img2024.cnblogs.com/blog/3453534/202405/3453534-20240525192013325-1275416462.png
https://img2024.cnblogs.com/blog/3453534/202405/3453534-20240525192118581-1032809407.png
2.代码部门

首先,我们需要用到std::wstring_convert,这个标准库需要头文件#include,我们定义string str,用static std::wstring_convert converter;定义我们所需要的从utf-8编码的字符串到宽字符串的转换器。
打开文件,读取文件内容到str内,使用from_bytes(str)函数即可实现字符串的转换,又由于outtextxy没有使用wstring的重载,使用wstring的成员函数c_str()即可转换成wchar_t字符串,最终,我们用这样的代码将笔墨绘制在窗口上outtextxy(10, 10, converter.from_bytes(str).c_str());。
结果如图:
https://img2024.cnblogs.com/blog/3453534/202405/3453534-20240525195337007-1567872648.png
完整代码如下:
#include#include#include#include#includestd::string str;int main(){        initgraph(500, 500);        static std::wstring_convert converter;        std::ifstream infile("file.txt");        if (!infile)        {                std::cerr
页: [1]
查看完整版本: 使用EasyX制作游戏需要读写文件时遇到编码问题的解决方法