matlab wchar_t,C++中wchar_t与wstring理解及中文编码的处理
C/C++语言中的字符类型
存在两种表示字符的基本类型:
char:一个字节8bit表示,最多表示256个字符,表示和用来处理ASCII字符集,国际通用
wchar_t:多字节字符表示,典型2个字节或者4个字节,如GNU libc中为4B,可以表示更多的字符,满足国际化应用开发的需求,实现标准
在开发中ASCII编码字符都是用char来表示,可以转换成wchar_t表示;wchar_t类型与Unicode编码是完全独立的概念,不过在实现上Unicode编码一般用wchar_t来表示实现而已,但wchar_t字符并不一定就是Unicode编码字符。
对应两种字符类型存在两种字符串类型(C++):
string: char字符列表或者是字节列表(bytes)
wstring: wchar_t字符列表或者是宽子节列表
对应两种字符类型的输出函数流对象有:
sprintf/wsprintf: 分别对应char与wchar_t
cout/wcout:分别对应string与wstring
stringstream/wstringstream: 分别对应string与wstring
字符串常量
C++11标准中增加了一些表示字符串常量的标识,如下有:
L"您好!": wstring字符串常量,使用文件保存编码方式字符集
R"(您 好 \n)": 原始字符串常量(字节数组),保留所有的字符
u8"您好!": string字符串常量(字节数组),使用UTF8进行编码保存
字符集及编码
已知有很多的字符集,比如:ASCII,UTF8,GBK,GB2312,UTF16,UTF32,UNICODE,Latin等等。常用中文字符集编码有:
UTF8:又分为带签名和不带签名两种,Windows代码页为65001,VS中应该选择【UTF8-带签名】的格式
GBK/GB2312:Windows代码页为936
GB18030: Windows代码页为54936
小技巧:修改Windows系统中cmd命令行窗口的显示字符集,默认字符集为OS字符集,如GBK-936。如果希望显示UTF8字符,则可以修改:chcp 65001.
在VS项目的调试命令窗口中无法手动修改,可以通过system函数来修改:
system("C:\\Windows\\system32\\chcp 65001");// 修改终端字符集为UTF8
源文件的编码保存选项
可以将源文件保存成不同的编码方式,如果文件中有中文,则必须选择可以对中文进行编码的字符集,如UTF8,GBK,GB2312等,否认可能会出现莫名其妙的编译错误,因为文件中存在无法识别的字符内容。
在Visual Studio中,选中文件后该设置在:【文件 - 高级保存选项】中。
C++11中GBK/UTF/wchar_t之间的编码处理转换
在处理中文时,不同的应用场景下总是无法避免进行GBK和UTF8之间的相互转换,C++11标识提供了和机制和工具来简化处理。
借助其中的std::wstring_convert和std::codecvt_utf8模板,通过wchar_t类型为中介,可以快速地实现转换,基本代码如下:
/*
转换GBK编码的中文到UTF8编码:GBK - WChar - UTF8两次转换
*/
//GBK在linux下的locale名可能是"zh_CN.GBK"
const char* GBK_LOCALE_NAME = ".936"; //GBK在windows下的locale name
std::wstring_convert<:codecvt_byname char mbstate_t>> Conver_GBK(new codecvt_byname(GBK_LOCALE_NAME)); //GBK - wchar_t
std::wstring _wname = Conver_GBK.from_bytes(data.Name); // 输入为char*的字符串表示或者数组,输出为wstring
std::wstring _waddr = Conver_GBK.from_bytes(data.Address);// 输入为char*的字符串表示或者数组,输出为wstring
std::wstring _wdept = Conver_GBK.from_bytes(data.GrantDept);// 输入为char*的字符串表示或者数组,输出为wstring
wcout << "Name: " << _wname << ",addr:" << _waddr << ",dept:" << _wdept << endl;
// 将wstring转化为UTF8编码的字节数组string表示
std::wstring_convert<:codecvt_utf8>> conv;
string _name = conv.to_bytes(_wname);// 输入为wstring字符串
string _addr = conv.to_bytes(_waddr);
string _dept = conv.to_bytes(_wdept);
// 将UTF8字符串转换为GBK字符编码表示string字节数组
std::string _name = Conver_GBK.to_bytes(conv.from_bytes(_name)); // 先转换成wstring,然后再转换成GBK的string
std::string _addr = Conver_GBK.to_bytes(conv.from_bytes(_addr)); // 先转换成wstring,然后再转换成GBK的string
matlab wchar_t,C++中wchar_t与wstring理解及中文编码的处理相关推荐
- [转]wchar_t char std::string std::wstring CString 转换
[转]wchar_t char std::string std::wstring CString 转换 1 #include <string> 2 // 使用CString必须使用MFC, ...
- MATLAB中的函数句柄 理解
MATLAB中的函数句柄 理解 https://zhuanlan.zhihu.com/p/266263265 https://blog.csdn.net/kevinhg/article/details ...
- matlab怎么画碎石图,成分分析中biplot函数不理解_主成分分析
成分分析中biplot函数不理解_主成分分析 对主成分分析中的biplot函数不理解,谁能帮忙解释?谢谢了 解答: 运行下面的例子,理解我加黑的那句话即可: Examples Perform a pr ...
- c语言 wchar_t,一个【wchar_t】引发的学案
里面讲到了wchar_t -------------------------------------------------------------- Win OS 之 wchar_t 与 ANSI/ ...
- 花了1晚上diy的matlab解数独算法,很好理解!
花了1晚上diy的matlab解数独算法,很好理解! 前言 一.数独的规则 二.算法 1.思路 2.流程图 3.Matlab代码 总结 前言 老婆最近迷上了数独,还给我拍了张照片,初步了解了规则之后, ...
- matlab差分阶跃响应,matlab在DSP中的应用(四)---离散系统的冲激响应和阶跃响应...
一.实验目的 (1)加深对离散线性移不变(LSI)系统基本理论的理解,明确差分方程与系统函数之间的关系. (2)初步了解用MATLAB语言进行离散时间系统研究的基本方法. (3)掌握求解离散时间系统冲 ...
- matlab换挡程序,一种基于MATLAB换挡过程中快速锁定分析数据的方法与流程
本发明涉及汽车变速器数据分析,特别的,涉及一种基于matlab换挡过程中快速锁定分析数据的方法. 背景技术: 自动变速器的核心功能是能根据驾驶员意图进行自动换挡,解放驾驶员的左脚:在自动变速器的使用过 ...
- matlab在电磁波中的应用,Matlab在电磁场与电磁波学习中的应用
Matlab在电磁场与电磁波学习中的应用 裴逸菲 (燕京理工学院信息科学与技术学院,河北廊坊 065201) 摘要:针对电磁场与电磁波在大学课程中的理论性强.概念抽象的特点,在学习中引入matlab软 ...
- matlab在天线方向图中的应用与研究,MATLAB在天线方向图中的应用与研究
MATLAB在天线方向图中的应用与研究 王曼珠1,张民1,崔红跃2 (1.北京电子科技学院 通信工程系,北京100070;2.中国民用航空大学,天津300300)a 摘 要:以天线方向图函数为例,分析 ...
最新文章
- 【每日一算法】唯一摩尔斯密码词
- wince中的hook(钩子)用法
- 用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联。
- JavaSE(十五)——注解
- Springboot配置通过URL访问图片(静态资源)
- 机器学习各算法思想(极简版)
- 数据预处理之归一化/标准化/正则化/零均值化
- java 圆形碰撞箱_你会使用“碰撞箱”吗?5种你不知道的玩法 甚至能定位死亡方位...
- 手写java_手写java锁
- python实验指导书答案函数代码复用_#Python学习笔记(5)函数和代码重用,复用
- 本科计算机相关课程设计,计算机科学及技术专业本科生大学课程设计.doc
- ansys linux 安装教程pdf,Deepin linux安装Ansys13详细教程.pdf
- node 生成随机头像_给微信设置卡通头像,再不怕撞脸!
- w8服务器dns修改,怎么修改DNS Win8修改DNS服务器地址的具体步骤图解
- 学习虚幻4(一)U3D与UE4的比较
- L'Hospital法则
- AI 去掉图片的背景色
- (附源码)基于PHP下的大学生校园交流论坛的设计与实现 毕业设计101634
- Vue父传子详细教程
- 【STM32项目】老人健康跌倒检测系统实现