DownKyi:B站视频下载效率提升全指南
2026/4/3 7:13:22
在C/C++中,字符串字面量是存储在静态内存区域的字符数组。其基本形式为:
constchar*str="中文字符";但直接使用窄字符(char)处理中文时,常因编码问题导致乱码。核心问题在于:
// 需要额外iconv库iconv_tcd=iconv_open("UTF-8","GBK");iconv(cd,&inbuf,&inlen,&outbuf,&outlen);constchar*str="\xE4\xB8\xAD\xE6\x96\x87";// UTF-8字节序列方案1:宽字符字面量
constwchar_t*wstr=L"中文";wchar_t尺寸平台相关(Windows 2字节/Linux 4字节)方案2:UTF-8字面量(C++11)
constchar*u8str=u8"中文";// 显式UTF-8编码#include<iostream>#include<cstring>intmain(){constchar*str=u8"你好世界";std::cout<<"字节长度:"<<strlen(str)<<std::endl;// 输出12(UTF-8每个汉字3字节)}统一源码编码
g++ -finput-charset=UTF-8跨平台处理
#if_WIN32#include<windows.h>SetConsoleOutputCP(CP_UTF8);#endifstd::u8stringstd::u8string str=u8"中文处理无忧";| 方法 | 内存占用 | 跨平台性 | 开发效率 |
|---|---|---|---|
| 窄字符+转码 | 中 | 差 | 低 |
| 宽字符 | 高 | 中 | 中 |
| UTF-8字面量 | 低 | 优 | 优 |
// 网络传输示例voidsendPacket(conststd::u8string&data){socket.write(data.c_str(),data.size());}// 文件读写示例std::ofstreamfile("log.txt",std::ios::binary);file.write(reinterpret_cast<constchar*>(u8"操作日志"),12);通过UTF-8字面量的标准化使用,结合编译器设置:
源码UTF-8+u8前缀+终端UTF-8=中文零乱码 \text{源码UTF-8} + \text{u8前缀} + \text{终端UTF-8} = \text{中文零乱码}源码UTF-8+u8前缀+终端UTF-8=中文零乱码
使用者可彻底摆脱传统转码的繁琐流程,建议在新项目中全面采用此方案。