directory_iterator 按预期使用Visual Studio和Xcode返回UTF8。
然而,wdirectory_iterator 使用Visual Studio返回UTF16,使用Xcode返回UTF8,尽管返回了wchar_t字符串。
我可以更改什么来让wdirectory_iterator返回UTF32?
对question I asked previously的回答表明可能需要更改区域设置,但根据'locale -a',可用的唯一区域设置是
en_GB,en_GB.ISO8859-1,en_GB.ISO8859-15,zh_CN.US-ASCII,en_GB.UTF-8 所有都是8位,可能除了en_GB
我尝试了en_GB以防它可能不是8位,但这会导致boost :: filesystem :: exists抛出boost :: filesystem :: wpath :: to_external转换异常。
答案 0 :(得分:1)
wdirectory_iterator
是basic_directory_iterator<wpath>
的typedef。 wpath
是basic_path<std::wstring, wpath_traits>
的typedef。
与std::basic_filebuf
中的内容类似,A basic_path
使用“内部”编码来表示程序的名称,并使用“外部”编码与平台的文件系统进行交互。这些编码之间的转换与std::basic_filebuf
中的转换一样,使用其上嵌入的语言环境的std::codecvt
。
因此,迭代器通过系统编码中的操作系统获取名称(即“外部”编码),并使用Traits::to_internal
转换为“内部”编码。要执行所需的转换,您可以:
wpath_traits::imbue()
,将其传递给具有执行UTF8-> UTF32转换的codecvt方面的区域设置to_internal
以执行UTF8-> UTF32转换