繁体   English   中英

将 std::filesystem::path 与需要 UTF-8 char* 的库相连接?

[英]Interfacing std::filesystem::path with libraries that expect UTF-8 char*?

我希望使用std::filesystem::path来轻松操作路径,但我使用的库期望在所有平台上使用 UTF-8 编码的const char*

我看到我可以得到一个u8string ,但它的c_str()返回一个char8_t*

有什么方法可以让我在所有平台上从filesystem::path转到 UTF-8 编码的char*吗?

char8_tchar不同的真正原因是确保它的用户知道这不是一个简单的 char,并且需要单独的编码/解码来处理它。 除此之外,它与char相同。

看起来您正在使用的库无法识别这一点,或者是 C++20 之前的库。 在任何一种情况下,您都可以使用reinterpet_castconst char8_t*const char* - 当这种转换合适时,这将是罕见的示例之一。

char8_t缓冲区可以合理安全地转换为char const*指针并传递给其他 API。

char8_t是一种独特的类型,其底层存储与unsigned char相同。 unsigned char位转换为char是合法的。

char可能有符号或无符号,因此在可移植代码中摆弄它有点危险。 但是简单地将它(只读)传递给另一个 API 是非常安全的。

通常将一种类型别名为另一种类型在 C++ 中是非法的,但char是具有特殊别名的类型之一。

请注意,将char缓冲区直接转换为指向char8_t的指针是不合法的。 因此,如果它在char数据中提供 utf-8 序列并且您需要它作为char8_t缓冲区,则必须将其复制到char8_t缓冲区(可以通过 memcpy 或类似方法完成)以保持在标准定义的行为范围内.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM