ANSI,UNICODE, UTF-8 字符串之间的相互转换

24 篇文章 0 订阅

转自 http://topic.csdn.net/u/20090414/11/ea7ffb2d-82fb-4504-b1f9-77560f0dceae.html?88949

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. include "stdafx.h"   
  2. #include "windows.h"   
  3. #include <string>   
  4. #include <fstream>   
  5. #include <iostream>   
  6. using namespace std;   
  7.   
  8.   
  9. //从Unicode到UTF8   
  10. string ToUTF8(wstring str)   
  11. {   
  12.     char* buff;   
  13.     int buffersize=WideCharToMultiByte(CP_UTF8,0,str.c_str(),(int)str.length(),0,0,0,0);        //获取需要的输出缓冲区长度   
  14.     buff=new char[buffersize+1];   
  15.     WideCharToMultiByte(CP_UTF8,0,str.c_str(),(int)str.length(),buff,buffersize+1,0,0);   
  16.     buff[buffersize]=0;   
  17.     string utf=buff;   
  18.     delete []buff;   
  19.     return(utf);   
  20. }   
  21.   
  22. //从Unicode到Ansi   
  23. string ToString(wstring str)   
  24. {   
  25.     char *buff=new char[str.length()+1];   
  26.     int i=WideCharToMultiByte(CP_ACP,0,str.c_str(),str.length(),buff,str.length()+1,0,0);   
  27.     buff[i]=0;   
  28.     string text=buff;   
  29.     delete [] buff;   
  30.     return(text);   
  31. }   
  32.   
  33. //从UTF8到Unicode   
  34. wstring    FromUTF8(string utf)   
  35. {   
  36.     wchar_t *buff=new wchar_t[utf.length()+1];   
  37.     int i=MultiByteToWideChar(CP_UTF8, 0, utf.c_str(),-1, buff, (int)utf.length());   
  38.     buff[i+1]=0;   
  39.     wstring str=buff;   
  40.     delete [] buff;   
  41.     return(str);   
  42. }   
  43.   
  44. //从Ansi到Unicode   
  45. wstring ToString(string str)   
  46. {   
  47.     wchar_t *buff=new wchar_t[str.length()+1];   
  48.     MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, buff, str.length()+1);   
  49.     wstring text=buff;   
  50.     delete [] buff;   
  51.     return(text);   
  52. }   
  53.   
  54. void main()   
  55. {   
  56.   string asc="abcd这是一个ASCII字符串";   
  57.   wstring unicode=ToString(asc); //toString有两个重载,分别是Ascii to Unicode 和Unicode to Ascii   
  58.   string utf8=ToUTF8(unicode);   
  59.   wstring utf16=FromUTF8(utf8);   
  60.   
  61.   ofstream ofs("D://01.txt");   
  62.   ofs < <utf8.c_str() < <'/n';   
  63.   ofs.close();   
  64.   
  65.   system("pause");   
  66. }   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值