【发布时间】:2015-11-06 04:01:11
【问题描述】:
和我搜索过的很多案例都有些不同。
我收到如下字符串:
std::string str = "\\u8f93\\u5165\\u7684";
如何解析转义序列以构造实际的 UTF-8 字符串?
【问题讨论】:
-
解码是什么意思?
-
您可以遍历每个字符,如果它是一个反斜杠,后跟
u,读取接下来的 4 个字符,使用std::strtol()将它们解析为一个整数,并将其作为一个字符适当地附加到另一个字符-类型的字符串,例如std::basic_string<uint32_t>. -
这是两个问题:如何转义为 UTF-16,以及如何将其转换为 UTF-8。前者是一些平庸的bitwiggling(正如TPC指出的那样),对于后者(以及一般的Unicode处理)我建议ICU。
-
@DevSolar 虽然 ICU 是一个很好的一般建议,但 UTF 到 UTF 的转换是 C++11 的一部分
-
@Cubbi:标准 C++ 在处理字符集的细节方面仍然相当差劲,这就是我建议不要打扰的原因。迟早你会和
toupper( 'ß' )这样的东西发生冲突。