带有unicode路径的gtk_file_chooser_get_filename

时间:2017-05-02 08:04:43

标签: c unicode gtk

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;

1 个答案:

答案 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()