gtk_file_chooser_get_filename 带有 unicode 路径

gtk_file_chooser_get_filename with unicode path

gtk_file_chooser_get_filename 适用于没有 unicode 字符的文件。但是如果我在一个文件夹中选择一个带有 unicode 字符的文件(在我的例子中是日文),我没有得到正确的文件名。

是否有 gtk_file_chooser_get_filenamewchar_t 版本,或者我是否应该对文件名进行额外处理以获得 wchar_t 字符串?

char* filename = gtk_file_chooser_get_filename(fileChooser);

std::cout  << filename << std::endl;
std::wcout << filename << std::endl;

gtk_file_chooser_get_filename() returns strings encoded with the current locale 可能是也可能不是 UTF-8。 g_filename_to_utf8() 将文件名从语言环境编码转换为 UTF-8。

std::wcout 需要宽字符,而不是 UTF-8。在我的系统上 sizeof(wchar_t) 是四个字节,因此 std::wcout 需要以 UTF-32 编码的字符串。

std::cout << filename << std::endl; 应该可以正常工作,因为没有完成转换。

对于 std::wcout << filename << std::endl;,您需要将语言环境(最好是 UTF-8)转换为 UTF-32(或您的编译器用于宽字符的任何内容),例如使用 std::wstring_convert::from_bytes().