c++ - 跨平台 unicode 路径处理

标签 c++ unicode boost winapi cross-platform

我正在使用 boost::filesystem 进行跨平台路径操作,但是当需要将调用分解为我无法控制的不接受 UTF 的接口(interface)时,这会崩溃8.例如,当使用 Windows API 时,我需要转换为 UTF-16,然后调用我将要调用的任何函数的宽字符串版本,然后将任何输出转换回 UTF-8。

虽然 wpath 和许多 boost::filesystem 函数的其他 w* 形式有助于保持理智,但对于如何最好地处理这种转换,是否有任何建议在需要的地方使用宽字符串形式,同时保持我自己的代码的一致性?

最佳答案

嗯,最简单的方法是制作某种通用例程,该例程将按照您希望提供的路径或路径周围的包装类的方式返回编码的字符串。

boost::filesystem::wpath boostPath( L"c:\\some_path" );
MyPathWrapper p( boostPath );
std::wstring sUtf8 = p.file_string_utf8();
std::wstring sUtf16 = p.file_string_utf16();
// or
std::wstring sUtf8 = p.file_string( CP_UTF8 );
// ...

类似的东西。

关于c++ - 跨平台 unicode 路径处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1768991/

相关文章:

c++ int switch 语句总是转到 `default`

java - 当从命令行或 jar 文件执行应用程序时,JTable 将无法正确显示 Unicode。不过在 Eclipse 中它工作得很好

c++ - "Multi-byte Character Set"当前的现代术语是什么

c++ - 使用 fgetc 和 feof 的文件预计会发生什么?

c++ - 在构建时指定模板参数

C++ 自安装 Windows 服务

sql-server - 集成 Spring + Hibernate + Sql 服务器并支持 unicode

c++ - 使用boost的多线程一位读者和一位作者

c++ - Mongo C++ 客户端库没有看到我的 boost

c++ - 如何使用 boost::format 对变量中包含小数位数的数字进行零填充?