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_filename
的 wchar_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()
.
gtk_file_chooser_get_filename
适用于没有 unicode 字符的文件。但是如果我在一个文件夹中选择一个带有 unicode 字符的文件(在我的例子中是日文),我没有得到正确的文件名。
是否有 gtk_file_chooser_get_filename
的 wchar_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()
.