簡體   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