SDL2加载具有特殊字符的文件

SDL2 loading files with special characters

本文关键字:文件 特殊字符 加载 SDL2      更新时间:2023-10-16

我遇到了一个问题,那就是:在使用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" );