ANSI與UTF8之間的轉換!std::string與UTF8之間的轉換
具體思路是先將ANSI轉換為UNICODE,再將UNICODE轉換為UTF8!
{
int sourceLen = MultiByteToWideChar(sourceCodepage, 0, pIn, -1, NULL, 0);
if (sourceLen <= 0)
{
return false;
}
wchar_t* pUnicode = NULL;
pUnicode = new wchar_t[sourceLen+1];
memset(pUnicode, 0, (sourceLen+1)*sizeof(wchar_t));
MultiByteToWideChar(sourceCodepage, 0, pIn,-1, (LPWSTR)pUnicode, sourceLen);
BYTE * pTargetData = NULL;
int targetLen = WideCharToMultiByte(targetCodepage, 0, (LPWSTR)pUnicode, -1, (char *)pTargetData, 0, NULL, NULL);
if (targetLen <= 0)
{
return false;
}
pTargetData = new BYTE[targetLen+1];
memset(pTargetData, 0, targetLen+1);
WideCharToMultiByte(targetCodepage, 0, (LPWSTR)pUnicode, -1, (char *)pTargetData, targetLen, NULL, NULL);
strcpy_s(pOut, targetLen, (char*)pTargetData);
delete [] pTargetData;
delete [] pUnicode;
return true;
}
bool UTF82ANSI(const char* pIn, char* pOut)
{
return CodePageConvert(pIn, pOut, CP_UTF8, CP_ACP);
}
bool ANSI2UTF8(const char* pIn, char* pOut)
{
return CodePageConvert(pIn, pOut, CP_ACP, CP_UTF8);
}
std::string string2UTF8(const std::string & str)
{
int nwLen = ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, NULL, 0);
wchar_t * pwBuf = new wchar_t[nwLen + 1];//一定要加1,不然會出現尾巴
ZeroMemory(pwBuf, nwLen * 2 + 2);
::MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.length(), pwBuf, nwLen);
int nLen = ::WideCharToMultiByte(CP_UTF8, 0, pwBuf, -1, NULL, NULL, NULL, NULL);
char * pBuf = new char[nLen + 1];
ZeroMemory(pBuf, nLen + 1);
::WideCharToMultiByte(CP_UTF8, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL);
std::string retStr(pBuf);
delete []pBuf;
pBuf = NULL;
delete []pwBuf;
pwBuf = NULL;
return retStr;
}
相關文章
- NSData與UIImage之間的轉換UI
- String Date Calendar之間的轉換(轉)
- android中String與InputStream之間的相互轉換方式Android
- [轉] jQuery物件與DOM物件之間的轉換jQuery物件
- Json,String,Map之間的轉換JSON
- mysql時間與字串之間相互轉換MySql字串
- Java中Array與ArrayList之間的轉換Java
- spark: RDD與DataFrame之間的相互轉換Spark
- 字串與資料流之間的轉換字串
- Jquery 陣列與字串之間的轉換jQuery陣列字串
- Map和String型別之間的轉換型別
- String和Date、Timestamp之間的轉換
- CString,int,string,char*之間的轉換
- delphi:string,PChar,Array of Char 之間的轉換
- python str與bytes之間的轉換Python
- nodejs字元與位元組之間的轉換NodeJS字元
- 【Go】IP地址轉換:數字與字串之間高效轉換Go字串
- string和byte[]之間的轉換 (C#)C#
- Java:String和Date、Timestamp之間的轉換Java
- 圖解Excel與Html格式之間的互相轉換圖解ExcelHTML
- c++中幾種常見的型別轉換。int與string的轉換,float與string的轉換以及string和long型別之間的相互轉換。to_string函式的實現和應用。C++型別函式
- Linux下轉換字符集(UTF8轉換)Linux
- C++中char*與wchar_t*之間的轉換C++
- Android Bitmap 與 Drawable之間的區別和轉換Android
- JAVA進階:VO(DTO)與PO(DAO)之間的轉換Java
- 第42篇 字元與進位制之間的轉換字元
- 角度和弧度之間的轉換
- clob和字串之間的轉換字串
- Java之時間轉換Java
- pyspark.sql.DataFrame與pandas.DataFrame之間的相互轉換SparkSQL
- 多位元組與UTF-8、Unicode之間的轉換Unicode
- WindowsCE下Unicode和Ansi字元間互相轉換的例子 (轉)WindowsUnicode字元
- C++ string互轉wstring/Unicode互轉ANSI/Unicode互轉UTF8C++Unicode
- php的漢字轉換: Unicode(UTF8)->GBK (轉)PHPUnicode
- python中的時間轉換,秒級時間戳轉string,string轉時間Python時間戳
- java編碼之間轉換Java
- Golang 陣列和字串之間的相互轉換[]byte/stringGolang陣列字串
- 時間戳與yyyy-mm-dd hh:mm:ss格式之間的互相轉換時間戳