0

directory_iterator按预期使用 Visual Studio 和 Xcode 返回 UTF8。

然而,wdirectory_iterator使用 Visual Studio 返回 UTF16,使用 Xcode 返回 UTF8,尽管返回 wchar_t 字符串。

我可以改变什么来让 wdirectory_iterator 返回 UTF32?

对我之前提出的问题的回答表明可能需要更改语言环境,但是根据“locale -a”,唯一可用的语言环境是

en_GB、en_GB.ISO8859-1、en_GB.ISO8859-15、en_GB.US-ASCII、en_GB.UTF-8 都是 8 位的,可能除了 en_GB

我尝试了 en_GB 以防它可能不是 8 位,但这会导致 boost::filesystem::exists 引发 boost::filesystem::wpath::to_external 转换异常。

4

1 回答 1

1

wdirectory_iteratorbasic_directory_iterator<wpath>. wpathbasic_path<std::wstring, wpath_traits>.

与 中所做的类似std::basic_filebuf,Abasic_path使用“内部”编码来表示程序的名称,并使用“外部”编码来与平台的文件系统交互。这些编码之间的转换就像 in 一样std::basic_filebuf,通过使用其std::codecvt上的语言环境来完成。

因此,名称是由迭代器以系统编码(即“外部”编码)从操作系统中获取的,并使用Traits::to_internal. 要执行所需的转换,您可以:

  • 在您的程序中调用wpath_traits::imbue()“早期”,向其传递带有执行 UTF8->UTF32 转换的 codecvt 方面的语言环境
  • 或者定义并使用您自己的 Traits 类,您可以在其中to_internal执行 UTF8->UTF32 转换
于 2009-10-29T13:37:40.667 回答