[英]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.