生活随笔
收集整理的這篇文章主要介紹了
C++中ASCII、unicode与Utf8之间的相互转化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
頭文件:UTN.h
[cpp]?view plaincopy print?
#pragma?once?? #include?"stdafx.h"?? #include?"windows.h"?? #include?<iostream>?? #include?<string>?? using?namespace?std;?? ?? ?? ?? wstring?AsciiToUnicode(const?string&?str);?? string??UnicodeToAscii(const?wstring&?wstr);?? ?? wstring?Utf8ToUnicode(const?string&?str);?? string??UnicodeToUtf8(const?wstring&?wstr);?? ?? string??AsciiToUtf8(const?string&?str);?? string??Utf8ToAscii(const?string&?str);?? ?? ?? CStringW????AsciiToUnicode_CSTR(const?CStringA&?str);?? CStringA????UnicodeToAscii_CSTR(const?CStringW&?wstr);?? ?? CStringW????Utf8ToUnicode_CSTR(const?CStringA&?str);?? CStringA????UnicodeToUtf8_CSTR(const?CStringW&?wstr);?? ?? CStringA????AsciiToUtf8_CSTR(const?CStringA&?str);?? CStringA????Utf8ToAscii_CSTR(const?CStringA&?str);?? ?? ?? int?StringToInt(const?string&?str);?? string?IntToString(int?i);?? string?IntToString(char?i);?? string?IntToString(double?i);??
cpp文件:UTN.cpp
[cpp]?view plaincopy print?
#pragma?once?? #include?"stdafx.h"?? #include?"UTN.h"?? ?? wstring?AsciiToUnicode(const?string&?str)?{?? ?????? ????int?unicodeLen?=?MultiByteToWideChar(CP_ACP,?0,?str.c_str(),?-1,?nullptr,?0);?? ?????? ????wchar_t?*pUnicode?=?(wchar_t*)malloc(sizeof(wchar_t)*unicodeLen);?? ?????? ????MultiByteToWideChar(CP_ACP,?0,?str.c_str(),?-1,?pUnicode,?unicodeLen);?? ????wstring?ret_str?=?pUnicode;?? ????free(pUnicode);?? ????return?ret_str;?? }?? string?UnicodeToAscii(const?wstring&?wstr)?{?? ?????? ????int?ansiiLen?=?WideCharToMultiByte(CP_ACP,?0,?wstr.c_str(),?-1,?nullptr,?0,?nullptr,?nullptr);?? ?????? ????char?*pAssii?=?(char*)malloc(sizeof(char)*ansiiLen);?? ?????? ????WideCharToMultiByte(CP_ACP,?0,?wstr.c_str(),?-1,?pAssii,?ansiiLen,?nullptr,?nullptr);?? ????string?ret_str?=?pAssii;?? ????free(pAssii);?? ????return?ret_str;?? }?? wstring?Utf8ToUnicode(const?string&?str)?{?? ?????? ????int?unicodeLen?=?MultiByteToWideChar(CP_UTF8,?0,?str.c_str(),?-1,?nullptr,?0);?? ?????? ????wchar_t?*pUnicode?=?(wchar_t*)malloc(sizeof(wchar_t)*unicodeLen);?? ?????? ????MultiByteToWideChar(CP_UTF8,?0,?str.c_str(),?-1,?pUnicode,?unicodeLen);?? ????wstring?ret_str?=?pUnicode;?? ????free(pUnicode);?? ????return?ret_str;?? }?? string?UnicodeToUtf8(const?wstring&?wstr)?{?? ?????? ????int?ansiiLen?=?WideCharToMultiByte(CP_UTF8,?0,?wstr.c_str(),?-1,?nullptr,?0,?nullptr,?nullptr);?? ?????? ????char?*pAssii?=?(char*)malloc(sizeof(char)*ansiiLen);?? ?????? ????WideCharToMultiByte(CP_UTF8,?0,?wstr.c_str(),?-1,?pAssii,?ansiiLen,?nullptr,?nullptr);?? ????string?ret_str?=?pAssii;?? ????free(pAssii);?? ????return?ret_str;?? }?? string?AsciiToUtf8(const?string&?str)?{?? ????return?UnicodeToUtf8(AsciiToUnicode(str));?? }?? string?Utf8ToAscii(const?string&?str)?{?? ????return?UnicodeToAscii(Utf8ToUnicode(str));?? }?? ?? CStringW????AsciiToUnicode_CSTR(const?CStringA&?str)?{?? ????return?AsciiToUnicode(LPCSTR(str)).c_str();?? }?? CStringA????UnicodeToAscii_CSTR(const?CStringW&?wstr)?{?? ????return?UnicodeToAscii(LPCWSTR(wstr)).c_str();?? }?? ?? CStringW????Utf8ToUnicode_CSTR(const?CStringA&?str)?{?? ????return?Utf8ToUnicode(LPCSTR(str)).c_str();?? }?? CStringA????UnicodeToUtf8_CSTR(const?CStringW&?wstr)?{?? ????return?UnicodeToUtf8(LPCWSTR(wstr)).c_str();?? }?? ?? CStringA????AsciiToUtf8_CSTR(const?CStringA&?str)?{?? ????return?UnicodeToUtf8_CSTR(AsciiToUnicode_CSTR(str));?? }?? CStringA????Utf8ToAscii_CSTR(const?CStringA&?str)?{?? ????return?UnicodeToAscii_CSTR(Utf8ToUnicode_CSTR(str));?? }?? ?? int?StringToInt(const?string&?str)?{?? ????return?atoi(str.c_str());?? }?? string?IntToString(int?i)?{?? ????char?ch[1024];?? ????memset(ch,?0,?1024);?? ????sprintf_s(ch,?sizeof(ch),?"%d",?i);?? ????return?ch;?? }?? string?IntToString(char?i)?{?? ????char?ch[1024];?? ????memset(ch,?0,?1024);?? ????sprintf_s(ch,?sizeof(ch),?"%c",?i);?? ????return?ch;?? }?? string?IntToString(double?i)?{?? ????char?ch[1024];?? ????memset(ch,?0,?1024);?? ????sprintf_s(ch,?sizeof(ch),?"%f",?i);?? ????return?ch;?? }??
UTF8和UnICODE轉換
[cpp]?view plaincopy print?
CString?CNoviewPDlg::AsciiToUnicode(CStringA?szStringA)?? {?? ????string?str?=?szStringA.GetBuffer(0);?? ?????? ????int?unicodeLen?=?MultiByteToWideChar(CP_UTF8,?0,?str.c_str(),?-1,?nullptr,?0);?? ?????? ????wchar_t?*pUnicode?=?(wchar_t*)malloc(sizeof(wchar_t)*unicodeLen);?? ?????? ????MultiByteToWideChar(CP_UTF8,?0,?str.c_str(),?-1,?pUnicode,?unicodeLen);?? ????wstring?ret_str?=?pUnicode;?? ????free(pUnicode);?? ????return?CString(ret_str.c_str());?? }?? CStringA?CNoviewPDlg::UnicodeToAscii(CString?szString)?? {?? ????wstring?wstr?=?szString.GetBuffer(0);?? ?????? ????int?ansiiLen?=?WideCharToMultiByte(CP_UTF8,?0,?wstr.c_str(),?-1,?nullptr,?0,?nullptr,?nullptr);?? ?????? ????char?*pAssii?=?(char*)malloc(sizeof(char)*ansiiLen);?? ?????? ????WideCharToMultiByte(CP_UTF8,?0,?wstr.c_str(),?-1,?pAssii,?ansiiLen,?nullptr,?nullptr);?? ????string?ret_str?=?pAssii;?? ????free(pAssii);?? ????return?CStringA(ret_str.c_str());?? } ?
總結
以上是生活随笔為你收集整理的C++中ASCII、unicode与Utf8之间的相互转化的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。