簡體   English   中英

如何在C ++中取消轉義UTF-8字符串

[英]How can I unescape a UTF-8 string in c++

與我搜索過的許多情況有些不同。

我收到如下字符串:

std::string str = "\\u8f93\\u5165\\u7684";

如何解析轉義序列以構造實際的UTF-8字符串?

這是一個簡單的解析和轉換作業,例如可以通過以下方式完成:

#include <iostream>
#include <string>
#include <codecvt>
#include <boost/spirit/include/qi.hpp>
namespace qi = boost::spirit::qi;
int main()
{
    std::string str = "\\u8f93\\u5165\\u7684";
    std::u16string u16;
    qi::parse(str.begin(), str.end(), *("\\u" >> qi::hex), u16);
    std::string u8 = std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t>().to_bytes(u16);
    std::cout << "utf 8 string " << u8 << " consiting of " << u8.size() << " bytes\n";
}

活在coliru http://coliru.stacked-crooked.com/a/62efb680a3d27a60

注意:此答案是在對問題進行澄清編輯之前發布的。


只需將其傳遞給類似“ \\ u8f93 \\ u5165 \\ u7684”的字符串即可

要么:

#include <codecvt>
std::string(u8"\u8f93\u5165\u7684")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM