C++中如何无需依赖ICU库将Unicode码点转换为对应字符串
实现方法
\u属于编译期的转义语法,仅支持代码里直接写常量的场景,运行时拼接字符串的操作编译器不会识别,不需要在这个写法上纠结。
你不需要额外安装ICU库,用C++11及以上的标准库就能实现需求,操作步骤如下:
- 第一步:把拿到的十六进制码点字符串(比如
"2460")转换成整数类型的码点值 - 第二步:把整数类型的Unicode码点转成UTF-8编码的字符串直接输出即可
可直接运行的示例代码
#include <iostream> #include <string> #include <locale> #include <codecvt> int main() { // 你的输入:十六进制的Unicode码点字符串 std::string tmp = "2460"; // 第一步:把十六进制字符串转成无符号整数,第三个参数16代表按十六进制解析 unsigned int code_point = std::stoul(tmp, nullptr, 16); // 第二步:把码点转成UTF-8字符串 std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> converter; std::string result = converter.to_bytes(static_cast<char32_t>(code_point)); // 输出结果,就是你要的① std::cout << result << std::endl; return 0; }
注意事项
- 现在主流的GCC、Clang、Visual Studio都默认支持C++11及以上标准,编译时不需要加额外参数
- 如果Windows控制台输出乱码,可以先执行
chcp 65001切换到UTF-8代码页再运行程序,Linux、macOS默认都是UTF-8编码不会出现乱码问题
内容的提问来源于stack exchange,提问作者Volensia Volenski
相关产品推荐
相关产品推荐

