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

打印 上一主题 下一主题

主题 921|帖子 921|积分 2763

使用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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

卖不甜枣

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表