当一个软件打开一个文本时,它要做的第一件事是决定这个文本究竟是使用哪种字符集(ANSI还是UNICODE)的哪种编码(ANSI每个国家都可能不同,UNICODE分为UTF-8,UTF-16,UTF-32)保存的。

二者的差距别人已总结的很明白了,我就不在复制一遍了
Unicode字符集与多字节字符集
Unicode字符集和多字节字符集关系//推荐看这一个,先看的前一个,把我头看晕了=
多字节字符集与Unicode字符集其中有wchar_t与char类型间的转换
CString的使用
以下内容参考c++入门经典(第四版)中看到的关于表示字符的内容

1.表示字符: P16

字符集演变:ASCII码(7bit表示)–ASCII(8bit表示,变体称为Latin-1)–其他各国专用字符集–通用字符集(UCS,32bit表示)

Unicode标准字符集:编码方式有UTF-8,UTF-16(UTF-8和UTF-16不能表示Unicode集合中的所有字符?)等
UTF-8把字符表示为长度在1字节和四字节之间变化的序列,UTF16把字符表示为一个或两个16位值。
存储Unicode字符有3个数据类型wchar_t,char16_t.char32_t

2.使用字符变量 P50

char类型主要用于存储单个字符的编码,占用一个字节的内存。c++标准没有指定用于表示基本字符集的字符编码,所以这由编译器指定。但一般使用ASCII编码。
wchar_t是一种基本类型,它可以存储实现方式支持的最大扩展字符集中的所有成员,定义时要在字面量前加上L,如

wchar_t wch(L'h');

也可使用十六进制表示法创建

  wchar_t wch1(L'\x0438'); //Cyrillic(西里尔语) N

注:
wchar_t类型不能很好地处理国际字符,使用char16_t类型会更好,该类型会把编码的字符存储为UTF-16,也可以使用char32-t类型,它存储了UTF-32编码字符。字面量的小写字母前缀u表示UTF-16,UTF-32用大写字母U作为前缀
标准库提供了标准输入和输出流wcin和wcout,来读写用于wchar_t类型的字符。但没有提供处理char16_t和char32_t字符数据的库。

3.国际字符串

wstring包含wchar_t类型的字符串,wchar_t是c++内置的宽字符类型
u16string对象,该对象包含16位Unicode字符串,其类型是char16_t
u32string对象,该对象包含32位Unicode字符串,其类型是char32_t
stiing头文件定义了所有这些类型,后两个类型比存储wchar_t字符的字符串类型更有用。
注:
理论上,可以使用string把字符串存储为UTF-8字符。定义UTF-8字符串时在普通字符串字面量的前面加上u8,但是string类型把字符存储为char类型,且对unicode编码一无所知。UTF-8编码使用1-4字节编码每个字符,操作字符串的对象的函数无法识别它。例如,如果字符串包含需要两个或三个字节表示的字符,length()就会返回错误的长度

初始化字符串时时应加上对应的前缀(L,u,U),所有字符串类型可使用的函数同string。

wstring类型的问题是给wchar_t类型应用的字符编码是由实现方式定义(各个国家的多字节编码不同)的,所以随编译器的不同而不同,如果需要使用支持多个国家的字符集,最好使用u16string和u32string。

原字符串字面量:所有字面都都不需要在使用转义符\来进行转义,这种用法对于正则表达式来说可读性很高。
通过加上前缀 R"( 与后缀)”
(书上说可通过加前缀 “*( 与后缀 )*",可通过RU使char32_t指定为原字符串字面量,我反正这样使用编译器报错)

    string str = R"(FSD""\\FSD)";cout << str << endl;

输出

4.windows下的字符转换

void CharChange(std::string &strInfo)
{int nwLen = MultiByteToWideChar(CP_UTF8, 0, strInfo.c_str(), -1, NULL, 0);wchar_t * pwBuf = new wchar_t[nwLen + 1];memset(pwBuf, 0, (nwLen + 1) * sizeof(wchar_t));MultiByteToWideChar(CP_UTF8, 0, strInfo.c_str(), strInfo.length(), pwBuf, nwLen);int nLen = WideCharToMultiByte(CP_ACP, 0, pwBuf, -1, NULL, NULL, NULL, NULL);char * pBuf = new char[nLen + 1];memset(pBuf, 0, nLen + 1);// 多字节的编码WideCharToMultiByte(CP_ACP, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL);strInfo = pBuf;delete[]pBuf;delete[]pwBuf;pBuf = NULL;pwBuf = NULL;
}

Unicode字符集与多字节字符集相关推荐

  1. 转:Unicode字符集和多字节字符集关系

    原文地址: http://my.oschina.net/alphajay/blog/5691 unicode.ucs-2.ucs-4.utf-16.utf-32.utf-8 http://stallm ...

  2. Unicode字符集和多字节字符集关系(一)

    另外可参考: 谈谈Unicode编码,简要解释UCS.UTF.BMP.BOM等名词 http://blog.csdn.net/smonster/archive/2008/10/31/3194587.a ...

  3. VS2005 宽字符 unicode字符集和多字节字符集

    在vs2005以前版本的vs默认使用多字节字符集,而vs2005默认使用unicode字符集,这会使一些代码不能编译通过 其区别如下 unicode字符集 void Point::output(int ...

  4. 单字节字符集,多字节字符集,Unicode

    我们在这里介绍一下字符类型.这里有3种编码模式对应3种字符类型. 第一种编码类型是单子节字符集(single-byte   character   set   or   SBCS).在这种编码模式下, ...

  5. unicode和MBCS(多字节字符集)的关系

    unicode和MBCS(多字节字符集)的关系 多了,先转载过来,供大家分享. 转载地址:http://my.oschina.net/alphajay/blog/5691 ************** ...

  6. 多字节字符集与Unicode字符集(CString char*和wchar_t* 容易出错的原因)

    1.基本概念 2.L与_T 3.char TCHAR 与 wchar_t,strcpy wcscpy与_tcscpy 4.LPSTR,LPCSTR,LPTSTR,LPCTSTR,LPWSTR,LPCW ...

  7. UNICODE与多字节字符集等字符问题

    VS2008默认的字符集是Unicode,而VC6.0默认是多字节字符集,Unicode字符集你要加_T("")或L"",你也可以" 工程-属性-修改 ...

  8. VS编译器中的字符集(多字节和Unicode)的区别

    文档声明: 以下资料均属于本人在学习过程中产出的学习笔记,如果错误或者遗漏之处,请多多指正.并且该文档在后期会随着学习的深入不断补充完善.感谢各位的参考查看. 笔记资料仅供学习交流使用,转载请标明出处 ...

  9. Unicode 和多字节字符集 (MBCS) 支持

    http://www.cnblogs.com/ccjt/p/4320244.html unicode和多字节字符集是两种不同的编码方式,不同的编码方式下,所对应的一些函数是不兼容的. 读到多字节菜单字 ...

  10. COleVariant在多字节字符集下的坑

    以下代码(多字节字符集下): COleVariant var = CStringA("123开始唱"); CStringA str = V_BSTRT(&var); 你会发 ...

最新文章

  1. C语言经典例1-无重复数字的三位数
  2. STL的deque容器
  3. Effective Java之静态工厂代替构造器(一)
  4. bzoj 1645: [Usaco2007 Open]City Horizon 城市地平线【线段树+hash】
  5. 在Eclipse4.2 4.3 中安装最新版插件 WindowsBuilder swt
  6. 面试官:问你期望的工资是多少,怎么回答最好?
  7. 键盘输入123456789c语言,Python:键盘输入input
  8. 移动互联网终端 淘宝客如何实现盈利
  9. 为什么说EBC是提升企业“数治”水平的最优解
  10. 服务器U盘安装安装centos
  11. 几何图形变化(Codevember)
  12. 批量隐藏隐私文件手机实用干货
  13. 华为openGauss初级OGCA认证100%通过
  14. 四种傅里叶变换的简述
  15. 用计算机计算告白密码,阿拉伯数字高级表白密码 很火的表白密码
  16. PCIe(二)——TLP包构成
  17. 华为ax3怎么接光纤sc接口_华为路由器AX3与其他华为/荣耀路由器如何连接? | 192路由网...
  18. 论文阅读:GMAN: A Graph Multi-Attention Network for Traffic Prediction
  19. [书籍翻译]12周撰写期刊文章 学术出版成功指南——第 2 周:开始您的文章
  20. python爬虫个人文档整理

热门文章

  1. EBT 道客巴巴的加密与破解 -免费下载器的基础
  2. lpc1788的地址空间分配
  3. js 图片上传和二进制上传
  4. 正则表达式手机号(大陆,香港)
  5. win11右键新建没有txt文本文档记事本怎么办
  6. 3D打印切片软件cura使用
  7. linux 命令chmod 755的意思
  8. 5种Python深度学习库和资料
  9. 如何关闭 Mac 版 QQ 上线离线提示音?
  10. android 按钮救星,按键救星下载-按键救星专业版(Button Savior Pro) 安卓版v2.1.1-PC6安卓网...