VC在建一个新的项目时,都是默认Unicode字符集。
字符集不仅涉及编码,还涉及字符字节的物理存储方式,常常成为宽字符unicode字符集和窄字符(gb2312)多字节字符集
UTF-8: 1~3字节可变
UNICODE: 2字节一个字符 单个字符宽度固定。
GB2312: 中文2字节一个字符,字母等1个字节,为多字节字符集。位宽动态变化
例子: “你”字的UTF-8编码: E4 BD A0 11100100 10111101 10100000
“你”的Unicode编码: 4F 60 01001111 01100000
按照UTF-8的编码规则,分解如下:xxxx0100 xx111101 xx100000
只要都加了_T("xxxxxxxx")宏,及字符串声明处理函数等都用_T或W头的函数,
如:wsprintf,TCHAR,_tcsrchr,_tcslen。
如果只是单个程序不和其他程序交互,信息显示是没有问题的。
编译时,宏转换会自动转换为系统设置的宽字符(unicode)或多字节字符。
唯一存在的问题就是当一个已经存在的软件系统和我们这个新系统字符串数据通讯时,会发生问题。
如果你不把字符串显示出来,只是存储或者转发。好像问题不大。
但一旦要连接字符串或者显示出来,这就很重要了。
一定要搞明白,传输过来的字符串是什么字符集存储的。
然后转换成当前的字符集存储方式。
如果不想手工编码转换,那就把工程的字符集和传过来的系统的字符集调整成一直的字符集。
如果你写一个控制台程序发送到服务端的回射程序。服务端打印输入的控制台字符。
控制台程序输入问题是,即使你写的控制台程序项目设置成unicode。他的输入好像默认只是多字节字符集。因为控制的输入处理是集成在windows系统中的。windows系统控制台输入是多字节字符集的。
如果你的服务端接收并打印控制台输入的字符,那服务端也设置成多字节字符集,否则就要手工编码从把接收到的多字节转换到unicode宽字符。否则就会是乱码了。