gtk_file_chooser_get_filename
适用于没有unicode字符的文件。但是如果我在一个包含unicode字符的文件夹中选择一个文件(在我的情况下是日文),我就不会得到正确的文件名。
wchar_t
版本是gtk_file_chooser_get_filename
还是应该使用文件名进行额外处理以获得wchar_t
字符串?
char* filename = gtk_file_chooser_get_filename(fileChooser);
std::cout << filename << std::endl;
std::wcout << filename << std::endl;
答案 0 :(得分:3)
gtk_file_chooser_get_filename()
返回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()
。