SDL2加载具有特殊字符的文件
SDL2 loading files with special characters
我遇到了一个问题,那就是:在使用SDL2&SDL2_Image,它打开图像文件,以便以后在修改图像数据的情况下保存它们。当打开一个没有特殊字符的图像(如áéíóúñ,例如"buenos-aires.jpg">(时,它会按预期工作但是,如果有任何特殊字符(如"córdoba.jpg">(,SDL_Image会生成一个错误,显示"无法打开文件"。不管怎样,如果我使用std::ifstream flux和我从CSV文件中获得的确切文件名(多余的,如"córdoba.jpg">或"misiónes.jpg"(,ifstream运行良好。。。使用特殊字符是错误吗?UNICODE,UTF,有事吗?
关于环境的一些信息:Windows10(西班牙语,拉丁美洲(,SDL2&SDL2_Image(最新版本(,GCC编译器,使用Mingw64 7.1.0
关于我正在尝试制作的软件:它使用CSV格式,带有阿根廷各州的名称,已经尝试更改.CSV上的编码。它根据CSV上的名称加载图像,更改并保存
我知道我可能错过了一些基本的东西,但已经耗尽了我的资源。
IMG_Load()
将其file
参数直接转发到SDL_RWFromFile()
:
// http://hg.libsdl.org/SDL_image/file/8fee51506499/IMG.c#l125
SDL_Surface *IMG_Load(const char *file)
{
SDL_RWops *src = SDL_RWFromFile(file, "rb");
const char *ext = SDL_strrchr(file, '.');
if(ext) {
ext++;
}
if(!src) {
/* The error message has been set in SDL_RWFromFile */
return NULL;
}
return IMG_LoadTyped_RW(src, 1, ext);
}
SDL_RWFromFile()
的file
参数应该是UTF-8字符串:
SDL_RWops* SDL_RWFromFile(const char* file, const char* mode)
功能参数:
- 文件:UTF-8字符串,表示要打开的文件名
- mode:ASCII字符串,表示用于打开文件的模式;有关详细信息,请参阅备注
因此将UTF-8路径传递到IMG_Load()
中。
C++11通过u8
前缀内置UTF-8字符串文字支持:
IMG_Load( u8"córdoba.jpg" );
相关文章:
- 如何用转义符替换字符串中的所有特殊字符
- 转换特殊字符(UTF-8)
- 如何在C++中反转文本文件中字符的顺序?
- 反转字符串中单词的位置,而不更改 O(1) 空格限制中特殊字符的顺序
- 如何在C++中打印此"█"特殊字符?
- c++为什么ifstream get()函数返回无法识别的特殊字符
- (C/C++)fscanf_s从txt文件以字符形式读取数组时缺少整数参数错误
- 如何检查字符串是否包含所有这些:数字、字母和特殊字符
- 转义std::字符串中的特殊字符
- SDL2加载具有特殊字符的文件
- 将 std::string 转换为具有特殊字符的 FString (TCHAR / wstring)
- 将文件信息(字符数组)嵌入到编译的二进制文件中
- 如何从文本文件C++读取整数和特殊字符
- 键入特殊字符并保存在文件中
- C++-用非ascii字符替换文件中的特殊字符
- 使用std::wifstream读取带有特殊字符的unicode文件
- 我正在尝试清除数据文件中具有某些条件的特殊字符,但这些条件不满足
- 从文件中读取单个字符将返回特殊字符
- c++如何从文件中删除所有的字符和特殊字符
- 二进制文件特殊字符