
win32 api 读unicode字符的奇怪问题
我用ReadFile函数读取文件,每次读两个字节,然后用printf("%c%c",(TCHAR)lpFileDataBuffer[0],(TCHAR)lpFileDat...
我用ReadFile函数读取文件,每次读两个字节,然后用printf("%c%c",(TCHAR)lpFileDataBuffer[0],(TCHAR)lpFileDataBuffer[1]);竟然可以输出一个汉字。如果在%c%c之间加上空格就出现乱码了。为什么%c%c的输出格式会合成一个Unicode的字符?
展开
1个回答
2013-08-22
展开全部
Windows控制台支持的不是Unicode,是MBCS(多字节字符串),一个汉字由两个字节组成,编码是GBK或GB18030,每个字节的值都大于127,在ASCII码里属于不可打印字符,当这两个字节连在一起的时候,控制台根据当前系统的代码页,认为这是一个汉字,所以把这两个字节作为汉字显示,这个工作是由控制台,也就是cmd.exe来完成,与程序无关。这种处理汉字的方式是从DOS时代继承而来的。当两个字符中间是空格的时候,相邻的两个字节无法构成一个汉字的编码,而每一个字节都是不可打印字符,所以输出是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询