gpt4 book ai didi

c++ - 如何让 boost directory_iterator 在 Mac 上返回 UTF 32

转载 作者:行者123 更新时间:2023-11-28 08:31:51 25 4
gpt4 key购买 nike

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, en_GB.US-ASCII, en_GB.UTF-8所有都是 8 位的,除了 en_GB

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

最佳答案

wdirectory_iteratorbasic_directory_iterator<wpath> 的类型定义. wpathbasic_path<std::wstring, wpath_traits> 的类型定义.

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

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

  • 调用wpath_traits::imbue()在你的程序的“早期”,传递给它一个带有 codecvt facet 执行 UTF8->UTF32 转换的语言环境
  • 或者定义并使用您自己的 Traits 类,在其中实现 to_internal执行 UTF8->UTF32 转换

关于c++ - 如何让 boost directory_iterator 在 Mac 上返回 UTF 32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1642703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com