C++字符串完全指南 - Win32字符编码(一)
翻译:连波
14/11/2002
URL: http://www.zdnet.com.cn/developer/tech/story/0,2000081602,39098124,00.htm

前言

字符串的表现形式各异,象TCHAR,std::string,BSTR等等,有时还会见到怪怪的用_tcs起头的宏。这个指南的目的就是说明各种字符串类型及其用途,并说明如何在必要时进行类型的相互转换。

在指南的第一部分,介绍三种字符编码格式。理解编码的工作原理是致为重要的。即使你已经知道字符串是一个字符的数组这样的概念,也请阅读本文,它会让你明白各种字符串类之间的关系。

指南的第二部分,将阐述各个字符串类,什么时候使用哪种字符串类,及其相互转换。

字符串基础 - ASCII, DBCS, Unicode

所有的字符串类都起源于C语言的字符串,而C语言字符串则是字符的数组。首先了解一下字符类型。有三种编码方式和三种字符类型。

第一种编码方式是单字节字符集,称之为SBCS,它的所有字符都只有一个字节的长度。ASCII码就是SBCS。SBCS字符串由一个零字节结尾。

第二种编码方式是多字节字符集,称之为MBCS,它包含的字符中有单字节长的字符,也有多字节长的字符。Windows用到的MBCS只有二种字符类型,单字节字符和双字节字符。因此Windows中用得最多的字符是双字节字符集,即DBCS,通常用它来代替MBCS。

在DBCS编码中,用一些保留值来指明该字符属于双字节字符。例如,Shift-JIS(通用日语)编码中,值0x81-0x9F 和 0xE0-0xFC 的意思是:“这是一个双字节字符,下一个字节是这个字符的一部分”。这样的值通常称为前导字节(lead byte),总是大于0x7F。前导字节后面是跟随字节(trail byte)。DBCS的跟随字节可以是任何非零值。与SBCS一样,DBCS字符串也由一个零字节结尾。

第三种编码方式是Unicode。Unicode编码标准中的所有字符都是双字节长。有时也将Unicode称为宽字符集(wide characters),因为它的字符比单字节字符更宽(使用更多内存)。注意,Unicode不是MBCS - 区别在于MBCS编码中的字符长度是不同的。Unicode字符串用二个零字节字符结尾(一个宽字符的零值编码)。

单字节字符集是拉丁字母,重音文字,用ASCII标准定义,用于DOS操作系统。双字节字符集用于东亚和中东语言。Unicode用于COM和Windows NT内部。

读者都很熟悉单字节字符集,它的数据类型是char。双字节字符集也使用char数据类型(双字节字符集中的许多古怪处之一)。Unicode字符集用wchar_t数据类型。Unicode字符串用L前缀起头,如:

wchar_t wch = L’1’; // 2 个字节, 0x0031

wchar_t* wsz = L”Hello”; // 12 个字节, 6 个宽字符

C++字符串完全指南 - Win32字符编码(一)相关推荐

  1. C++字符串完全指南 - Win32字符编码(二)

    C++字符串完全指南 - Win32字符编码(二) 作者: 翻译:连波 2002-11-15 14:13:21 Win32 API中的MBCS 和 Unicode API的二个字符集 也许你没有注意到 ...

  2. 《C++字符串完全指南——第一部分:win32 字符编码》

    <C++字符串完全指南--第一部分:win32 字符编码>     原作者:Michael Dun 译    者:Dingqiao Wang 引言 毫无疑问,你肯定见过像TCHAR, st ...

  3. C++字符串完全指引之一 —— Win32 字符编码

    [DOC]C++字符串完全指引之一 C++字符串完全指引之一 -- Win32 字符编码 原著:Michael Dunn 翻译:Chengjie Sun 原文出处:CodeProject:The Co ...

  4. C++字符串完全指引之一(Win32 字符编码)

    C++字符串完全指引之一(Win32 字符编码) 文档作者:Michael Dunn 所属类别:VC++ 推荐指数:★★★★ 文档人气:400 本周人气:14 发布日期:2006-7-12 引言 毫无 ...

  5. js笔记(三)ES5、ES5新增的数组的方法、字符串的方法、字符编码、对象的序列化和反序列化、bind

    数组方法.字符串方法总结 大目录 小目录 一.ES5严格模式 1. 严格模式: 2. 严格模式的行为变更: 二.ES5新增的数组的方法 1. 判断是否为数组:Array.isArray(): 2. 判 ...

  6. 字符串转换函数和字符编码

    //将单字节char*转化为宽字节wchar_t* wchar_t* AnsiToUnicode( const char* szStr ) {  int nLen = MultiByteToWideC ...

  7. C++字符串完全指南(转)

    C++字符串完全指南 - Win32字符编码(一)翻译:连波 14/11/2002 URL: http://www.zdnet.com.cn/developer/tech/story/0,200008 ...

  8. c++字符串完全指南

    C++字符串完全指南 - Win32字符编码(一) 前言 字符串的表现形式各异,象TCHAR,std::string,BSTR等等,有时还会见到怪怪的用_tcs起头的宏.这个指南的目的就是说明各种字符 ...

  9. C++字符串完全指南(zz)

    文章真的很好!让我想明白了许多,,,所以zz了~~ C++字符串完全指南 - Win32字符编码(一) 前言 字符串的表现形式各异,象TCHAR,std::string, BSTR 等等,有时还会见到 ...

最新文章

  1. 瀑布式开发与敏捷开发的区别是什么
  2. selenium+python headless 爬虫环境配置
  3. 104_鼠标事件对象
  4. python k线顶分型_【缠论】分型、笔的定义及其程序化
  5. 挺水的一门课,发现全系都过了,就自己挂了,这是一种什么样的感觉呢?
  6. ubuntu18.10终端的方块改成竖线
  7. apollo 配置中心_.NET Core 下使用 Apollo 配置中心
  8. windowns2019辅域添加
  9. C#播放流媒体的几种方法
  10. Nginx-反向代理
  11. 瑞幸咖啡“生死劫”:财务数据曾惊天造假,一年巨亏几十亿美元
  12. waning rm -i rm -rvfi
  13. 微信小程序--企业认证篇
  14. selenium IDE 遇到 Preparing to run your test 问题的解决
  15. 【学习资料】中国开放大学-电大-《教育学》形考作业答案(2018).docx
  16. PCL点云去背景(相减)的方法
  17. mysql:insert ignore、insert和replace区别
  18. 跻身四强 | 坤前强势入围IDC加速计算服务器榜单
  19. 借助 ONLYOFFICE 宏通过 OpenAI 数据填充单元格
  20. CTF:PHP MD5函数0E绕过漏洞

热门文章

  1. 拥抱 Android Studio 之二:Android Studio 与 Gradle 深入
  2. JavaScript基础知识(3)
  3. 强化学习图鉴|人工智能新兴子领域,分布式强化学习是AI技术未来大规模实用化的关键?
  4. Web Pages 快速入门
  5. SpringBoot的Web开发支持【超详细【一篇搞定】果断收藏系列】
  6. SpringBoot获取ServletContext和webApplicationConnect几种方法
  7. 国产Excel开发组件Spire.XLS【转换】教程(5):#/将特定工作表单元格转换为图像
  8. 【思维导图】计算机网络第六章应用层
  9. 华硕主板固态硬盘不识别_华硕主板Z97-A无法识别intel M.2 NVME固态硬盘的解决方法...
  10. java navmesh_服务器使用recast navigation