【发布时间】:2018-01-16 06:04:34
【问题描述】:
我们将路径表示为 boost::filesystem::path,但在某些情况下,其他 API 期望它们为 const char *(例如,使用 SQLite 打开数据库文件)。
来自the documentation,path::value_type是Windows下的wchar_t。据我所知,Windows wchar_t 是 2 个字节,UTF-16 编码。
有一个string()本地观察者返回一个std::string,同时声明:
如果 string_type 是不同于 String 的类型,则转换是 由 cvt 执行。
cvt 被初始化为默认构造的codecvt。这个默认构造的 codecvt 的行为是什么?
有this forum entry,建议使用utf8_codecvt_facet 的实例作为cvt 的值,以便可移植地转换为UTF-8。不过貌似这个codecvt其实是要转换between UTF-8 and UCS-4,而不是UTF-16。
什么是获得path 的std::string 表示的最佳方式(如果可能的话可移植),并确保在必要时从正确的wchar_t 编码转换?
【问题讨论】:
标签: c++ encoding utf-8 boost-filesystem