我需要將字串流作為 JSON 的值(使用 Rapidjson 庫),但 std::stringstream::str 不起作用,因為它不回傳 UTF-8 字符。我怎樣才能做到這一點?
例子:
d["key"].SetString(tmp_stream.str());
uj5u.com熱心網友回復:
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 資料放入 anstd::string并呼叫SetString. RapidJSON 接受資料并簡單地用“?”替換無效字符。如果這就是您所看到的,那么您需要:
- 確定你的字串有什么編碼
- 將字串重新編碼為 UTF-8
如果您的字串是 ASCII,則SetString可以正常作業,因為 ASCII 和 UTF-8 是兼容的。
如果您的字串是 UTF-16 或 UTF-32 編碼,則有幾個輕量級便攜式庫可以執行此操作,例如utfcpp。C 11有一個用于此的 API,但它的支持很差,現在從 C 17 開始被棄用。
如果您的字串使用更古老的編碼(如 Windows-1252)進行編碼,那么您可能需要使用MultiByteToWideCharWindows 上的作業系統 API ,或使用重量級 Unicode 庫(如LibICU)將資料轉換為更標準的編碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/363339.html
