繁体   English   中英

如何将 std::string 转换为 UTF-8?

[英]How can I convert a std::string to UTF-8?

我需要将字符串流作为 JSON 的值(使用 rapidjson 库),但 std::stringstream::str 不起作用,因为它没有返回 UTF-8 字符。 我怎样才能做到这一点?

示例: d["key"].SetString(tmp_stream.str());

rapidjson::Value::SetString接受一个指针和一个长度。 所以你必须这样称呼它:

std::string stream_data = tmp_stream.str();
d["key"].SetString(tmp_stream.data(), tmp_string.size());

正如其他人在评论中提到的那样, std::string是一个没有指定编码的char值容器。 它可以包含 UTF-8 编码字节或任何其他编码。

我测试了将无效的 UTF-8 数据放入std::string并调用SetString RapidJSON 接受数据并简单地将无效字符替换为“?”。 如果这就是您所看到的,那么您需要:

  1. 确定你的字符串有什么编码
  2. 将字符串重新编码为 UTF-8

如果您的字符串是 ASCII,那么SetString可以正常工作,因为 ASCII 和 UTF-8 是兼容的。

如果您的字符串是 UTF-16 或 UTF-32 编码的,那么有几个轻量级的可移植库可以做到这一点,比如utfcpp C++11 为此一个 API,但它的支持很差,现在从 C++17 起已弃用。

如果您的字符串使用更古老的编码(如 Windows-1252)进行编码,那么您可能需要使用操作系统 API(如Windows上的MultiByteToWideChar ),或使用重量级的 Z7F6C02D96265DD1D547B1101DE11

暂无
暂无

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

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