现代C++推荐UTF-8优先:源码与字面量用u8前缀,std::string存UTF-8字节流,跨平台避免wchar_t;系统交互按需转换,国际化结合ICU或fmtlib。

现代C++处理Unicode和UTF-8,核心是明确区分编码、表示和操作层次:源码用UTF-8保存,字符串用std::string(UTF-8字节序列),宽字符慎用,I/O与系统交互时按需转换,国际化靠标准库+ICU等辅助。
源文件与字符串字面量:用UTF-8,加u8前缀
C++11起支持UTF-8字面量。确保编辑器保存为UTF-8(无BOM),并在字符串前加u8前缀:
✔ 正确(推荐):const std::string hello = u8"你好,Hello ?"; // 编译期转为UTF-8字节流
✘ 避免:const char* s = "你好"; // 源文件编码不明,行为未定义
不加u8时,编译器按执行字符集处理(常为locale相关),跨平台极易出错。
立即学习“C++免费学习笔记(深入)”;
运行时字符串:用std::string存UTF-8,别用wchar_t或std::wstring
UTF-8是变长编码,std::string天然适配——它只管字节,不管语义。而wchar_t在Windows是UTF-16,在Linux/macOS通常是UTF-32,大小和含义都不统一,跨平台std::wstring几乎不可移植。
常见做法:
标签: linux windows 编码 字节 mac c++ macos win stream 本地化 cos 标准库 币
还木有评论哦,快来抢沙发吧~