把字符串转成UTF-8格式

转载 2004年07月21日 14:19:00

(1)

int  main(void) 

 char  str  [  256  ]  =  "唐志国"  ;    //一段UTF-8编码 
 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; 

(2)

int  main(void) 

 char  str  [  256  ]  =  "唐志国"  ;   
 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; 

(3)

int  main(void) 

 char  str  [  256  ]  =  "唐志国"  ;   
 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; 

(4)

这里面包含了两个方向的转换,你看一下吧
#include    "Windows.h" 
int  main(void) 

 char  str  [  256  ]  =  "唐志国"  ;    //一段UTF-8编码 
 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; 
 
 i=  MultiByteToWideChar  ( CP_UTF8   ,  0  ,(char*)  strB  ,-1  ,NULL,0); 
 strA  =  new  WCHAR[i]; 
 MultiByteToWideChar  (  CP_UTF8  ,  0  ,(  char  *  )  strB,  -1,  strA  ,  i); 

 delete  []strB; 
 
 i=  WideCharToMultiByte(CP_ACP,0,strA,-1,NULL,0,NULL,NULL); 
 strB=new  char[i]; 
 WideCharToMultiByte  (CP_ACP,0,strA,-1,strB,i,NULL,NULL); 
 //strB即为所求 
 delete  []strA; 
 
 delete  []strB; 


 return  0; 

(5)

这是转换函数:
 int CodePageConvert(UINT SrcCodePage, LPCTSTR pBuff, int iBuffLen, UINT DestCodePage, char* &lpCodePage)
 {
  int iWideCharCnt = ::MultiByteToWideChar(SrcCodePage, 0, pBuff, iBuffLen, NULL, 0);
  LPWSTR lpszWideChar = new wchar_t[iWideCharCnt + 1];
  memset(lpszWideChar, 0, (iWideCharCnt + 1) * sizeof(WCHAR));
  iWideCharCnt = MultiByteToWideChar(SrcCodePage, 0, pBuff, iBuffLen, lpszWideChar, iWideCharCnt);

  if(DestCodePage == 54936
    && !IsValidCodePage(54936))
   DestCodePage = 936;

  int iDestCnt = WideCharToMultiByte(DestCodePage, 0, lpszWideChar, iWideCharCnt, NULL, 0, NULL, NULL);
  lpCodePage = new char[iDestCnt + 1];
  memset(lpCodePage, 0, iDestCnt + 1);
  iDestCnt = WideCharToMultiByte(DestCodePage, 0, lpszWideChar, iWideCharCnt, lpCodePage, iDestCnt, NULL, NULL);

  delete []lpszWideChar; 
  return iDestCnt;
 }
下面是调用方法:
   utf-8 到 gbk
 int nLen = CodePageConvertUnix("UTF-8",_T("标准"),2,"GBK",lpOut);
   gbk 到utf-8
int nLen = CodePageConvertUnix("UTF-8",_T("标准"),2,"GBK",lpOut);

怎么把存储UTF-8编码的字符串转换成实际字符

踩过的坑1:怎么把存储UTF-8编码的字符串转换成实际字符首先说明下问题。之前用爬虫从网上down数据的时候因为没有思考到位,结果出现了一个很奇葩的问题。一般来说中文采用UTF8编码后写成byte[]...
  • u011518120
  • u011518120
  • 2016年03月16日 23:01
  • 1539

JS中文字符串和UTF-8编码字符串相互转换

JS中文字符串和UTF-8编码字符串相互转换1.中文字符串转化为UTF-8编码,如“”的UTF-8编码为“%3C%E6%B1%89%E5%AD%97%3E” 2.UTF-8编码字符串“%E6%B1%...
  • xinghuo0007
  • xinghuo0007
  • 2016年11月07日 10:13
  • 4959

JS实现unicode和UTF-8互转

有一设备,为短信网关。需将PC送过来的UTF-8转换成UNICODE才能将内容通过短信发送出去,同样,接收到的短信为unicode编码,也许转换成UTF-8才能在PC端软件显示出来。程序很简单,只是走...
  • shjhuang
  • shjhuang
  • 2017年07月05日 01:32
  • 1291

utf-8字符串转成汉字。

  • 2012年10月11日 08:59
  • 2KB
  • 下载

.h .cpp 转成utf-8格式,QT写的,做linux下的应用开发很有用

  • 2017年11月01日 16:16
  • 33.05MB
  • 下载

java程序将GBK字符转成UTF-8编码格式

UTF-8 编码介绍 UTF-8 编码是一种被广泛应用的编码,这种编码致力于 Java代码   把全球的语言纳入一个统一的编码   , 目前已经将几种亚洲语言纳入。UTF...
  • congcongsuiyue
  • congcongsuiyue
  • 2014年10月16日 11:26
  • 1714

【iOS解决方案】网络请求返回GB2312格式的xml数据转成UTF-8后为空(适用于论坛bbs)

一些高校的bbs由于历史久远,没有适应新的数据结构,请求返回的数据还是xml格式的,而现在常用的返回是json,这是个很头疼的地方,碰到的问题网上很难搜到资料,走了很多弯路。 现在具体讲一下在解析返...
  • u013883974
  • u013883974
  • 2015年05月29日 09:09
  • 867

utf-8编码的字符串转成unicode(ucs-4)编码的字符串

本人第一篇原创博客,尽力把代码注释清楚 typedef unsigned int mfchar_t; // 无符号的4字节,用于表示UCS-4的一个字符 typedef std::ba...
  • yzf279533105
  • yzf279533105
  • 2016年02月19日 11:07
  • 274

Linux使用技巧7--GBK转成UTF-8

Windows系统中编辑的Java源码,在Linux下打开会出现中文乱码的情况。原因就是文件编码格式的问题,Windows下通常是GBK而Linux下是UTF-8。在vim中用set fileenco...
  • lincyang
  • lincyang
  • 2015年04月30日 10:40
  • 10363

GBK转成utf-8,java实现及讲解

转载自java中GBK编码格式转成UTF8,用一段方法实现怎么做?好吧,看来问的人和回答的人都不一定清楚什么是“编码和编码格式”,以及如何理解“java中字符串的编码”;首先明确几点:unicode是...
  • shuijianbaozi
  • shuijianbaozi
  • 2017年05月09日 18:59
  • 202
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:把字符串转成UTF-8格式
举报原因:
原因补充:

(最多只允许输入30个字)