c++ - 如何在 C++ 中取消转义 UTF-8 字符串

标签 c++ linux utf-8

和我搜索过的很多案例有点不一样。

我收到如下字符串:

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

关于c++ - 如何在 C++ 中取消转义 UTF-8 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31983934/

相关文章:

c++ - 分配内存然后释放是否构成 C++ 程序中的副作用?

Java 程序无法在 Ubuntu 中从 MySQL 打印印地语、古吉拉特语

C++ - 如何使用 C++ 读取 Unicode 字符(例如印地语脚本),或者是否有更好的方法通过其他一些编程语言?

c++ - 完善相机参数并计算错误-OpenCV

c++ - 是否有通过引用分配 shared_ptr 的用例?

c++ - 如何用 try/catch block 包装调用?

linux - 为什么 apache 不能写入文件夹,即使它是组的成员?

linux - QML 可以使用 64 位 QtCreator 构建(编译)为 32 位

Linux 分段

php - UTF-8贯穿始终