请注意: typedef wchar_t WCHAR; // wc, 16-bit UNICODE character 这是VC6.0中的定义,好像不是三个字节?????????????????
以下的部分大多数内容摘自两只老虎网站编写的《无废话XML》,原书讲解比我这里详细的多,建议如果可能的话,还是读一下的好。首先说一下,一个字节能表示2^8=256种符号,不过ANSI定义的只有0~127,127之后的符号是扩展的,并不兼容,Dos中许多程序使用扩展的制表符制表,所以在中文Windows的DosBox中就显示的不正常了;而两个字节能表示2^16=65536种的符号,所以UniCode就能表示65536种符号,不过因为扩充的需要,事实上只使用了三四万,并保留了一个指定的空间用来在各种程序中自由使用,具体有那些,我就不说了。所谓UTF-16格式,虽然称之为变换格式,但是其变换方式很简单,基本和UniCode的格式一样,通常情况下并不需要变换,所以就不多说了。UTF-8格式比较不同,其编码为1~3个字节不等,其排列格式如下:图贴不上请原谅!其中的格式表示以位(Bit)为单位,红底黄字的是必须的格式,而黄底的是真正的编码,也就是说,单字节有7位可编码范围,双字节有11位可编码范围,三字节有16位可编码范围;因为单字节格式的范围正好是ASCII码的范围,而且其首位为零,所以和普通的ASCII的格式是一模一样的,也就是说,普通的英文字符串不需要进行转换就符合UTF-8格式,所以应该说是一种和英文兼容性最好的编码,也所以在IE5中加入了“总以UTF-8发送URL”,不过可惜的是,我们常用的中文URL其实不是UTF-8格式,而是GBK格式,硬要把GBK当成UTF-8来用,也难怪会出错了。关于UTF-8格式的使用,应该在文件处理上很有用处,至于以后会是UTF-8还是UTF-16占主流我不太清楚,不过即使不占主流的格式应该也有一定的支持者,了解一下也不为过。]]>http://Www.8594.neT/BLoG//blogview.asp?logID=818KusTaVBasic2004-08-09 01:29 AM
WCHAR* strA;
int i= MultiByteToWideChar ( CP_ACP , 0 ,(char*) str ,-1 ,NULL,0);
strA = new WCHAR[i];
MultiByteToWideChar ( CP_ACP , 0 ,( char * ) str, -1, strA , i); i= WideCharToMultiByte(CP_UTF8,0,strA,-1,NULL,0,NULL,NULL);
char *strB=new char[i];
WideCharToMultiByte (CP_UTF8,0,strA,-1,strB,i,NULL,NULL);
//strB即为所求
delete []strA;
delete []strB;
return 0;
typedef wchar_t WCHAR; // wc, 16-bit UNICODE character
这是VC6.0中的定义,好像不是三个字节?????????????????
E7 81 AB(都是16进制的);