主意:输入字符串必须是以'\0'结尾,如果输入字符串没有以'\0'结尾,请手动设置,否则转换会有错误。

unsigned int EncodeUtil::AnsiToUcs2( char* pAnsi, wchar_t*& pUcs2 )
{
  //预转换,得到所需空间的大小
  int wcsLen = ::MultiByteToWideChar(CP_ACP, NULL, pAnsi, strlen(pAnsi), NULL, 0);
  //分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间
  pUcs2 = new wchar_t[wcsLen + 1];
  //转换
  ::MultiByteToWideChar(CP_ACP, NULL, pAnsi, strlen(pAnsi), pUcs2, wcsLen);
  //最后加上'\0'
  pUcs2[wcsLen] = '\0';
  return wcsLen;
}

unsigned int EncodeUtil::Ucs2ToAnsi( wchar_t* pUcs2, char*& pAnsi )
{
  //预转换,得到所需空间的大小,这次用的函数和上面名字相反
  int ansiLen = ::WideCharToMultiByte(CP_ACP, NULL, pUcs2, wcslen(pUcs2), NULL, 0, NULL, NULL);
  //同上,分配空间要给'\0'留个空间
  pAnsi = new char[ansiLen + 1];
  //转换
  //unicode版对应的strlen是wcslen
  ::WideCharToMultiByte(CP_ACP, NULL, pUcs2, wcslen(pUcs2), pAnsi, ansiLen, NULL, NULL);
  //最后加上'\0'
  pAnsi[ansiLen] = '\0';
  return ansiLen;
}

unsigned int EncodeUtil::Ucs2ToUtf8( wchar_t* pUcs2, char*& pUtf8 )
{
  //预转换,得到所需空间的大小,这次用的函数和上面名字相反
  int u8Len = ::WideCharToMultiByte(CP_UTF8, NULL, pUcs2, wcslen(pUcs2), NULL, 0, NULL, NULL);
  //同上,分配空间要给'\0'留个空间
  //UTF8虽然是Unicode的压缩形式,但也是多字节字符串,所以可以以char的形式保存
  pUtf8 = new char[u8Len + 1];
  //转换
  //unicode版对应的strlen是wcslen
  ::WideCharToMultiByte(CP_UTF8, NULL, pUcs2, wcslen(pUcs2), pUtf8, u8Len, NULL, NULL);
  //最后加上'\0'
  pUtf8[u8Len] = '\0';
  return u8Len;
}

unsigned int EncodeUtil::Utf8ToUcs2( char* pUtf8, wchar_t*& pUcs2 )
{
  //预转换,得到所需空间的大小
  int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, pUtf8, strlen(pUtf8), NULL, 0);
  //分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间
  pUcs2 = new wchar_t[wcsLen + 1];
  //转换
  ::MultiByteToWideChar(CP_UTF8, NULL, pUtf8, strlen(pUtf8), pUcs2, wcsLen);
  //最后加上'\0'
  pUcs2[wcsLen] = '\0';
  return wcsLen;
}

unsigned int EncodeUtil::AnsiToUtf8( char* pAnsi, char*& pUtf8 )
{
  wchar_t* pUcs2 = NULL;
  AnsiToUcs2(pAnsi, pUcs2);
  unsigned int len = Ucs2ToUtf8(pUcs2, pUtf8);
  delete[] pUcs2;
  return len;
}

Windows下ANSI、Unicode、UTF8字符编码转换的更多相关文章

  1. C语言 windows下Ansi和UTF-8编码格式的转换

    当我们使用MinGW-w64作为编译器在windows系统环境下进行C语言编程时,如果源代码文件(.c)保存格式为Ansi格式,则在打印汉字时不会出现乱码:反之,如果我们使用UTF-8格式保存,则会出 ...

  2. windows下vim编辑器,字符编码设置。

    在windows下的vim默认字符集修改 之前使用vim编辑器的时候碰到乱码的问题,后来在网上看了记下了:在vim编辑器中按esc进入命令模式 1.修改vim内部编码    set encoding= ...

  3. 各种字符编码方式详解及由来(ANSI,UNICODE,UTF-8,GB2312,GBK)

    一直对字符的各种编码方式懵懵懂懂,什么ANSI UNICODE UTF-8 GB2312 GBK DBCS UCS……是不是看的很晕,假如您细细的阅读本文你一定可以清晰的理解他们.Let's go! ...

  4. ASCII,Unicode,GBK和UTF-8字符编码的区别和联系

    如果经常写python2,肯定会遇到各种“奇怪”的字符编码问题,每次都通过谷歌解决了,但是为什么会造成这种乱码.decode/encode失败等等,本文就字符和字符编码做一个总结,更加清晰区分诸多的编 ...

  5. ASCII、Unicode、GBK和UTF-8字符编码的区别联系(转载)

    ASCII.Unicode.GBK和UTF-8字符编码的区别联系 转载自:http://dengo.org/archives/901 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同 ...

  6. php字符编码转换之gb2312转为utf8(转)

    在php中字符编码转换我们一般会用到iconv与mb_convert_encoding进行操作,但是mb_convert_encoding在转换性能上比iconv要差很多哦.string iconv ...

  7. iconv字符编码转换

    转自 http://blog.csdn.net/langresser_king/article/details/7459367 iconv(http://www.gnu.org/software/li ...

  8. windows下编译java源文件的编码错误

    import java.util.Arrays;public class ArrayAsAReference{ public static void main(String[] args) { int ...

  9. 【转】Unicode utf8等编码类型的原理

    原文地址http://www.cnblogs.com/daxiong2014/p/4768681.html Unicode utf8等编码类型的原理 1.ASCII码  我们知道,在计算机内部,所有的 ...

随机推荐

  1. CF29D - Ant on the Tree(DFS)

    题目大意 给定一棵树,要求你按给定的叶子节点顺序对整棵树进行遍历,并且恰好经过2*n-1个点,输出任意一条符合要求的路径 题解 每次从叶子节点开始遍历到上一个叶子节点就OK了, 这个就是符合要求的路径 ...

  2. POJ2104&&HDU2665(静态区间第K小)

    题目大意 给定一个有N个数字的序列,然后又m个查询,形式如下: l r k 要求你返回区间[l,r]第k小的数是哪个 题解 终于弄懂主席树是个啥东西了,O(∩_∩)O~~,这题正是主席树的裸题,主席树 ...

  3. ios get airplay name

    tarting from iOS7 AudioToolbox API for currentRoute becomes deprecated: Apple instead made currentRo ...

  4. Robotium学习笔记三

    以下是从网络上抄录的一些Robotium注意事项 1)有些button没有string,没有text,只能通过index来click这样很不直观,而且button的index并不是固定的,有可能随着控 ...

  5. XML模式:Dublin Core

    Dublin Core 标准是一种信息分类方法,常用于图书馆.Dublin Core 标准有一个 XML Schema 定义了如何使用 XML 描述这类信息.Dublin Core 可以有效地对各种信 ...

  6. UML类图中类与类的四种关系图解

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  7. EditPlus保存文件时不生成其备份文件的方法

    3.将“保存时去掉备份文件”复选框去掉,点击 应用->确定,即可 .

  8. android zxing自定义界面,点击按钮开关闪光灯

    折腾了一天,今天基本把自定义扫描二维码界面实现了,主要碰到的问题是文本过长,要居中并换行,绘制图片,点击切换不同图片,打开或关闭闪关灯,结果发现在一些机型上出现空指针异常,又牵扯到硬件加速问题...参 ...

  9. 基于DOM的XSS注入漏洞简单解析

    基于DOM的XSS注入漏洞简单解析http://automationqa.com/forum.php?mod=viewthread&tid=2956&fromuid=21

  10. 一个苹果证书怎么多次使用(授权Mac开发)——导出p12文件

    为什么要导出.p12文件 当我们用大于三个mac设备开发应用时,想要申请新的证书,如果在我们的证书里,包含了3个发布证书,2个开发证书,可以发现再也申请不了开发证书和发布证书了(一般在我们的证书界面中 ...