![](/img/trans.png)
[英]How to convert UTF-8 encoded std::string to UTF-16 std::string
[英]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 接受数据并简单地将无效字符替换为“?”。 如果这就是您所看到的,那么您需要:
如果您的字符串是 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.