如何解决cocos2dx在win32下读取指定文件夹中文文件名乱码问题?

2026-04-02 13:301阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计551个文字,预计阅读时间需要3分钟。

如何解决cocos2dx在win32下读取指定文件夹中文文件名乱码问题?

以下是对原文的简化

阅读以下用法,请勿忘记引用:[链接1](http://blog.csdn.net/zhanghefu/article/details/21284323) [链接2](http://blog.csdn.net/cxf7394373/article/details/7195661)。

如何解决cocos2dx在win32下读取指定文件夹中文文件名乱码问题?

援引blog.csdn.net/zhanghefu/article/details/21284323

      blog.csdn.net/cxf7394373/article/details/7195661

先看一下用法

别忘了引入头文件。   这里我是得到 UserDatas 文件夹下的全部 .json 文件的名字 并转成UTF-8

#include "MyFileUtils.h"#include "IconvString.h"MyFileUtils fileUtilMyFileUtils();vector fileNames fileUtil.getUserDataFilesName();vector fileNamesConverted;for (int j0;jMyFileUtils.h 文件,直接在.h文件里实现  功能读取指定文件夹下的文件名称。

#ifndef __MYFILEUTILS_H__#define __MYFILEUTILS_H__#include "cocos2d.h"#include "io.h"#include "iostream"#include "vector"USING_NS_CC;using namespace std;class MyFileUtils{public:vector getUserDataFilesName(){//我自己的封装string strCCFileUtils::sharedFileUtils()->fullPathForFilename("UserDatas");getJsonFilesName(str.c_str(),files);return files;}void getFiles( string path, vector 0;//文件信息struct _finddata_t fileinfo;string p;if((hFile _findfirst(p.assign(path).append("\\*").c_str(), -1){do{//假设是文件夹,迭代之//假设不是,增加列表if((fileinfo.attrib 0 0)getFiles( p.assign(path).append("\\").append(fileinfo.name), files );}else{files.push_back(p.assign(path).append("\\").append(fileinfo.name) );}}while(_findnext(hFile, 0);_findclose(hFile);}}void getJsonFilesName( string path, vector 0;struct _finddata_t fileinfo;string p;if((hFile _findfirst(p.assign(path).append("\\*").c_str(), -1){do{string strfileinfo.name;if (str.find(".json")!-1){files.push_back( fileinfo.name ) ;}}while(_findnext(hFile, 0);_findclose(hFile);}}protected:private:vector files;};#endif

IconvString.h 转码工具类   功能转码解决中文乱码。使用iconv 库 注意头文件的引入每一个人可能不一样

#ifndef ICONV_STRING_H#define ICONV_STRING_H#include #include "iconv/iconv.h"//通用代码int code_convert(const char *from_charset, const char *to_charset, const char *inbuf, size_t inlen, char *outbuf, size_t outlen);std::string utf2gb(const char *inbuf);std::string gb2utf(const char *inbuf);#endif

//IconvString.cpp 实现

#include "IconvString.h"int code_convert(const char *from_charset, const char *to_charset, const char *inbuf, size_t inlen, char *outbuf, size_t outlen){iconv_t cd;const char *temp inbuf;const char **pin char **pout memset(outbuf,0,outlen);cd iconv_open(to_charset,from_charset);if(cd0) return -1;if(iconv(cd,pin,-1) return -1;iconv_close(cd);return 0;}/*UTF8转为GB2312*/std::string utf2gb(const char *inbuf){size_t inlen strlen(inbuf);char * outbuf new char[inlen * 2 2];std::string strRet;if(code_convert("utf-8", "gb2312", inbuf, inlen, outbuf, inlen * 2 2) 0){strRet outbuf;}delete [] outbuf;return strRet;}/*GB2312转为UTF8*/std::string gb2utf(const char *inbuf){size_t inlen strlen(inbuf);char * outbuf new char[inlen * 2 2];std::string strRet;if(code_convert("gb2312", "utf-8", inbuf, inlen, outbuf, inlen * 2 2) 0){strRet outbuf;}delete [] outbuf;return strRet;}

标签:文件名称

本文共计551个文字,预计阅读时间需要3分钟。

如何解决cocos2dx在win32下读取指定文件夹中文文件名乱码问题?

以下是对原文的简化

阅读以下用法,请勿忘记引用:[链接1](http://blog.csdn.net/zhanghefu/article/details/21284323) [链接2](http://blog.csdn.net/cxf7394373/article/details/7195661)。

如何解决cocos2dx在win32下读取指定文件夹中文文件名乱码问题?

援引blog.csdn.net/zhanghefu/article/details/21284323

      blog.csdn.net/cxf7394373/article/details/7195661

先看一下用法

别忘了引入头文件。   这里我是得到 UserDatas 文件夹下的全部 .json 文件的名字 并转成UTF-8

#include "MyFileUtils.h"#include "IconvString.h"MyFileUtils fileUtilMyFileUtils();vector fileNames fileUtil.getUserDataFilesName();vector fileNamesConverted;for (int j0;jMyFileUtils.h 文件,直接在.h文件里实现  功能读取指定文件夹下的文件名称。

#ifndef __MYFILEUTILS_H__#define __MYFILEUTILS_H__#include "cocos2d.h"#include "io.h"#include "iostream"#include "vector"USING_NS_CC;using namespace std;class MyFileUtils{public:vector getUserDataFilesName(){//我自己的封装string strCCFileUtils::sharedFileUtils()->fullPathForFilename("UserDatas");getJsonFilesName(str.c_str(),files);return files;}void getFiles( string path, vector 0;//文件信息struct _finddata_t fileinfo;string p;if((hFile _findfirst(p.assign(path).append("\\*").c_str(), -1){do{//假设是文件夹,迭代之//假设不是,增加列表if((fileinfo.attrib 0 0)getFiles( p.assign(path).append("\\").append(fileinfo.name), files );}else{files.push_back(p.assign(path).append("\\").append(fileinfo.name) );}}while(_findnext(hFile, 0);_findclose(hFile);}}void getJsonFilesName( string path, vector 0;struct _finddata_t fileinfo;string p;if((hFile _findfirst(p.assign(path).append("\\*").c_str(), -1){do{string strfileinfo.name;if (str.find(".json")!-1){files.push_back( fileinfo.name ) ;}}while(_findnext(hFile, 0);_findclose(hFile);}}protected:private:vector files;};#endif

IconvString.h 转码工具类   功能转码解决中文乱码。使用iconv 库 注意头文件的引入每一个人可能不一样

#ifndef ICONV_STRING_H#define ICONV_STRING_H#include #include "iconv/iconv.h"//通用代码int code_convert(const char *from_charset, const char *to_charset, const char *inbuf, size_t inlen, char *outbuf, size_t outlen);std::string utf2gb(const char *inbuf);std::string gb2utf(const char *inbuf);#endif

//IconvString.cpp 实现

#include "IconvString.h"int code_convert(const char *from_charset, const char *to_charset, const char *inbuf, size_t inlen, char *outbuf, size_t outlen){iconv_t cd;const char *temp inbuf;const char **pin char **pout memset(outbuf,0,outlen);cd iconv_open(to_charset,from_charset);if(cd0) return -1;if(iconv(cd,pin,-1) return -1;iconv_close(cd);return 0;}/*UTF8转为GB2312*/std::string utf2gb(const char *inbuf){size_t inlen strlen(inbuf);char * outbuf new char[inlen * 2 2];std::string strRet;if(code_convert("utf-8", "gb2312", inbuf, inlen, outbuf, inlen * 2 2) 0){strRet outbuf;}delete [] outbuf;return strRet;}/*GB2312转为UTF8*/std::string gb2utf(const char *inbuf){size_t inlen strlen(inbuf);char * outbuf new char[inlen * 2 2];std::string strRet;if(code_convert("gb2312", "utf-8", inbuf, inlen, outbuf, inlen * 2 2) 0){strRet outbuf;}delete [] outbuf;return strRet;}

标签:文件名称