Windows下的字符编码转换

主意:输入字符串必须是以‘\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;
}

时间: 2024-10-12 09:28:51

Windows下的字符编码转换的相关文章

配置 .vimrc 解决 Vim / gVim 在中文 Windows 下的字符编码问题

转载自:-杨博的日志 - 网易博客 Vim / gVim 在中文 Windows 下的字符编码有两个问题: 默认没有编码检测功能 如果一个文件本身采用的字符集比 GBK 大(如 UTF-8.UTF-16.GB18030),那么其中无法在 GBK 中对应的字符都会出现乱码,保存时会丢失.即使编辑文件时正确检测出文件格式也无济于事. 第一个问题的解决办法是在 ~/.vimrc 中加入以下配置: set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,eu

linux下文件字符编码转换

1.查看编码 通过file命令  file filename 可以查看文件的编码 2.编码转换 通过icnov命令  iconv -f UTF-16 -t UTF-8 sourceFile -o targetFile  此命令将UTF-16格式的sorceFile转换为UTF-8的targetFile

Windows下字符编码转换

有时候经常使用别人用Tabhost+其它的实现demo.单纯利用Tabhost该如何使用呢? 下面看例子: public class MainActivity extends TabActivity { public TabHost tabHost; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 获取对象 tabHost = getTabH

iconv字符编码转换

转自 http://blog.csdn.net/langresser_king/article/details/7459367 iconv(http://www.gnu.org/software/libiconv/)是一个开源的字符编码转换库,可以"方便"的完成几乎所有的编码转换工作.说简单是因为,它常用的接口就三个,iconv_open  iconv   iconv_close,但是即便是只有三个接口,要想使用正确也不容易.这里把一些基本概念和使用细节记录下来,希望能成为一篇最实用的

erlang中字符编码转换(转)

转自:http://www.thinksaas.cn/group/topic/244329/ 功能说明: erlang中对各种语言的编码支持不足,此代码是使用erlang驱动了著名的iconv编码库来对字符进行编码转换处理. 文件说明: iconv_erl.c和iconv.h 是erlang字符编码模块的driver,作用是对iconv进行封装.编译后生成iconv_erl.dll,供iconv.erl使用. iconv_makefile.win32 windows上编译iconv_erl.dl

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

在php中字符编码转换我们一般会用到iconv与mb_convert_encoding进行操作,但是mb_convert_encoding在转换性能上比iconv要差很多哦.string iconv ( string in_charset, string out_charset, string str ) 注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符

php 字符编码转换函数 iconv mb_convert_encoding比较

在使用PHP处理字符串时,我们经常会碰到字符编码转换的问题,你碰到过iconv转换失败吗? 发现问题时,网上搜了搜,才发现iconv原来有bug ,碰到一些生僻字就会无法转换,当然了配置第二个参数时,可以稍微弥补一下默认缺陷,不至于无法转换是截断,用法如下 iconv(“UTF-8″,”GB2312//IGNORE”,$data) ; 这样碰到生僻字转换失败时,它就会忽略失败,继续转换下面的内容,这算解决问题的一个办法,不过为了确保转换的成功率,我们可以用另一个转换函数(mb_convert_e

ASP中有关字符编码转换的几个有用函数

ASP中有关字符编码转换的几个有用函数 <%1.'UTF转GB---将UTF8编码文字转换为GB编码文字function UTF2GB(UTFStr) for Dig=1 to len(UTFStr)   '如果UTF8编码文字以%开头则进行转换  if mid(UTFStr,Dig,1)="%" then      'UTF8编码文字大于8则转换为汉字    if len(UTFStr) >= Dig+8 then        GBStr=GBStr & Con

python基础 字符编码转换

python2 1 #python2上所有的字符编码都需要先decode到unicode,再从unicode encode到目标编码 2 str_utf8 = "我就是我" 3 print("str_utf-8:我就是我:",str_utf8) 4 #将utf-8转换为unicode 5 str_utf8_to_unicode = str_utf8.decode("utf-8") 6 print(str_utf8_to_unicode) 7 #将