`

字符串基础 ASCII MBCS UNICODE DBCS[转]

阅读更多

转自:http://hi.baidu.com/atgc123/blog/item/0e394e1fe3e7c1fe19d57667.html

 

所有的字符串类都起源于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++字符串完全指南.doc

    21.2. 字符串基础 - ASCII, DBCS, Unicode 这里详细介绍了ASCII、DBCS(Double Byte Character Set)和Unicode三种字符编码标准。ASCII是最基础的7位编码,DBCS主要适用于东亚文字,而Unicode是国际通用的多语言字符...

    MFC字符串类.txt

    ### MFC字符串类知识点解析 ...通过对ASCII、DBCS、Unicode等不同字符编码的理解,以及对MFC字符串类和相关函数的介绍,读者可以更好地掌握字符串处理的方法,并能够在实际开发中灵活运用这些知识。

    C++字符串完全指引

    本文旨在提供一份全面的C++字符串指南,深入探讨字符串的基础、编码模式以及不同类型字符串之间的转换方法。 #### 引言 C++中存在多种字符串类型,如`TCHAR`、`std::string`、`BSTR`等,每种类型都有其特定的用途...

    字符编码的转换.pdf

    - 文件提到了在C++中处理字符串和宽字符串的函数,比如 strxxx 和 _mbsxxx 系列函数,这些函数在处理ASCII和MBCS字符串时是不同的。同时还提到了wcscpy, swprintf, _wtol等函数,这些函数用于处理宽字符串和转换宽...

    双字节 多字节 宽字节 Unicode

    - `vsprintf`: 格式化字符串到缓冲区(使用可变参数列表,标准字符集)。 #### 七、结论 综上所述,双字节、多字节、宽字节与Unicode是解决不同语言字符编码问题的重要手段。它们各自适用于不同的场景,但最终目标...

    在C和C++中使用Unicode

    取而代之的是使用`wchar_t`类型,并在字符串字面量前添加前缀`L`以表示Unicode字符串。例如:`wchar_t *sz = L"Hello, World!";` - 字符串处理函数也需要相应地替换为Unicode版本,例如`wcscpy()`、`wcscat()`等。 ...

    VC++ String

    - `std::string`:用于处理ASCII或MBCS字符串。 - `std::wstring`:用于处理Unicode字符串。 - **ATL类**: - `CStringT<TCHAR>`:通用字符串类,可以根据编译器设置使用MBCS或Unicode。 - `CString`:默认情况...

    Python中文乱码详解.pdf

    在Python 2中,字符串默认使用ASCII编码,这可能导致处理非ASCII字符时出现乱码。Python 3则将字符串类型改为Unicode,以更好地支持多种语言。当你读取、写入文件或网络数据时,需要明确指定文件的编码格式,如`open...

    atl开发技术深入解析_part2

    - **字符集**:不同操作系统和编程环境对字符集的要求各异,如ANSI、Unicode或EBCDIC,甚至MBCS/DBCS等。在多语言和多平台环境中,统一字符集的使用尤为关键。 - **源代码与运行时字符集**:虽然使用相同的字符集...

    win32课程文档

    - 使用 `L` 前缀标识字符串为 Unicode 格式,例如 `L"Hello"`。 4. **TCHAR 类型:** - `_T` 宏用于根据编译时定义的 `_UNICODE` 或 `_MBCS` 来选择合适的字符类型。 - 在编写兼容不同字符编码的应用程序时非常...

Global site tag (gtag.js) - Google Analytics