加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

MultiByteToWideChar

(2009-04-07 19:12:44)
标签:

it

                            MultiByteToWideChar

 

    前些日子了解了一下UTF-8怎么变UNICODE,之后又想到怎么把GB2312变成UNICODE,发现WINAPI函数可以帮我们做这个动作,根本没必要知道GB2312编码表啊,直接就可以转,估计是WINDODS的API函数把他封装起来了。

   由于这个在BXC有人写过这样的TOOL,所以没有必要写了,只要知道他是怎么实现的就行了,看了下面的CODE你就知道,怎么实现GB2312变成UNICODE,值得一提的时候,在转换的时候,必要要先用这个函数得到这个ANSI(GB2312)实际上有多少个UNICODE字符,之后再申请这多个空间。

 

/////////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include <string.h>
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>

int main(void)
{
      char  cword[20] = {"中华人民共和国"};       //定义一个GB2312的字串
      DWORD num= MultiByteToWideChar(CP_ACP,0,cword,-1,NULL,0); 

     //计算这个GB2312实际有几个字组成


      WCHAR *wword;                             //定义一个UNICODE的指针

      wword= (WCHAR*)calloc(num,sizeof(WCHAR));//动态的申请空间存字

      if(wword == NULL)              //判断申请到空间没有
      {
          free(wword);
       }

      memset(wword, 0, num*sizeof(WCHAR));       //初始化动作

      MultiByteToWideChar(CP_ACP,0, cword, -1, wword, num); 

      //把GB2312变成UNICODE

      free(wword);
      return 0;
}

////////////////////////////////////////////////////////////////////////

 API 函数 MultiByteToWideChar
    第一个参数为代码页, 用 GetLocaleInfo 函数获取当前系统的代码页,936: 简体中文, 950: 繁体中文
    第二个参数为选项,一般用 0 就可以了
    第三个参数为 ANSI 字符串的地址, 这个字符串是第一个参数指定的语言的 ANSI 字符串 (AnsiString)
    第四个参数为 ANSI 字符串的长度,如果用 -1, 就表示是用 0 作为结束符的字符串
    第五个参数为转化生成的 unicode 字符串 (WideString) 的地址, 如果为 NULL, 就是代表计算生成的字符串的长度
    第六个参数为转化生成的 unicode 字符串缓存的容量,也就是有多少个UNICODE字符。

 

 

                   Nigel Yan 于西安2009-04-07

 

 

0

阅读 收藏 喜欢 打印举报/Report
前一篇:UTF-8转Unicode
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有