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

C++ SDL2加载具有特殊字符的文件,c++,c++11,sdl-2,sdl-image,C++,C++11,Sdl 2,Sdl Image,我遇到了一个问题,那就是:在使用SDL2&SDL2_Image的Windows应用程序中,它会打开图像文件,以便以后保存它们并修改图像数据。 当它打开一个没有特殊字符的图像(比如像,“buenos aires.jpg”)时,它可以正常工作。但是,如果有任何提到的特殊字符(比如“córdoba.jpg”),SDL_图像将生成一个错误,显示“无法打开文件”。不管怎样,如果我使用std::ifstream flux和我从CSV文件中获得的确切文件名(冗余,如“córdoba.jpg”或“misióne

我遇到了一个问题,那就是:在使用SDL2&SDL2_Image的Windows应用程序中,它会打开图像文件,以便以后保存它们并修改图像数据。 当它打开一个没有特殊字符的图像(比如“buenos aires.jpg”)时,它可以正常工作。但是,如果有任何提到的特殊字符(比如“córdoba.jpg”),SDL_图像将生成一个错误,显示“无法打开文件”。不管怎样,如果我使用std::ifstream flux和我从CSV文件中获得的确切文件名(冗余,如“córdoba.jpg”或“misiónes.jpg”),ifstream工作得很好。。。使用特殊字符是错误的吗?UNICODE,UTF,有什么关系吗

关于环境的一些信息:Windows10(西班牙语、拉丁美洲)、SDL2和SDL2_图像(最新版本)、使用Mingw64 7.1.0的GCC编译器

关于我试图制作的软件:它使用CSV格式,带有阿根廷各州的名称,已经尝试在.CSV上更改编码。它根据CSV上的名称加载图像,对其进行更改并保存。
我知道我可能错过了一些基本的东西,但已经耗尽了我的资源。

:

和的
文件
参数应为UTF-8字符串:

功能参数:

  • 文件:表示要打开的文件名的UTF-8字符串
  • 模式:表示用于打开文件的模式的ASCII字符串;详见备注
因此,将UTF-8路径传递到
IMG\u Load()

C++11通过
u8
前缀内置UTF-8支持:

IMG_Load( u8"córdoba.jpg" );

您需要确保传递UTF-8编码字符串(而不是单字节编码字符串),并且SDL是使用Unicode支持构建的(即定义了
Unicode
\u Unicode
),因此它使用宽字符串并在内部调用
CreateFileW
SDL_RWops* SDL_RWFromFile(const char* file,
                          const char* mode)
IMG_Load( u8"córdoba.jpg" );