ToB企服应用市场:ToB评测及商务社交产业平台

标题: 使用EasyX制作游戏需要读写文件时遇到编码问题的解决方法 [打印本页]

作者: 卖不甜枣    时间: 2024-5-25 20:32
标题: 使用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。如下图:

如果不是utf-8编码,点击选择编码,通过编码重新打开,选择utf-8编码,这时原来的内容会变成乱码,将原来的内容删除,重新输入,保存即可。具体的操纵如下图:



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());。
结果如图:

完整代码如下:
[code]#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




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4