windows系统
在Windows NT系列的操作系统中最常用的两种字符集是ANSI和Unicode。ANSI是一种泛称,每一个国家或地区的ANSI编码都不一样;Unicode是双字节编码方式,目标是为世界是所有的字符提供一套唯一的、统一的字符编码,所以不管理在作保地方任何操作系统,一个确定字符的编码都是唯一的。
以“中文”两个汉字举例说明,在Windows XP简体中文版中,“中文”两个字的ANSI/GBK和Unicode分别为:ANSI/GBK 中 0XD6D0 文 0XCEC4Unicode 中 0X4E2D 文 0X6587
在Windows中,C++编程语言是最为接近底层的高级编程语言,其定义字符有两种方式:char类型和wchar_t类型。char类型采用ANSI/GBK编码,而wchar_t采用Unicode编码,wchar_t也是常说的宽字符型。定义如下两个字符串:char* str = '中文'; wchar_t* wcstr = L'中文'; 其在内存中的存储方式分别如下图1和图2
而字符串在磁盘中的存储方式,可以打开Windows记事本,输入“中文”两个字,在另存为对话框中的编码下拉框中分别选择ANSI、Unicode、Unicode big endian和UTF-8储存为四个文本文件,然后用十六进制文本编辑器打开,内容如下图
在Windows中,字符的输出方式,就是根据以上所述的编码标准、存储方式而来,具体输出有两种方式,首先是Windows控制台的输出方式,Widows在内部维护了一块控制台输出缓冲区,如要要向控制台输出字符串,只要将字符串所对应的内存区域复制到控制台缓冲区,Windows就会以默认的字符编码将控制台缓冲区的内容输出到控制台窗口。
第二种方式,就是在编程语言中进行,对于C语言的printf()函数和C++语言中的std::cout对象,其实都是调用系统“kernel32.dll”中的WriteConsole()函数,将字符串所对应的内存区域复制到控制台的缓冲区。