您的位置:首页 > 编程语言 > C语言/C++

C++中ASCII、unicode与Utf8之间的相互转化

2017-05-02 13:58 393 查看
头文件:UTN.h

[cpp] view
plain copy

 print?





#pragma once  

#include "stdafx.h"  

#include "windows.h"  

#include <iostream>  

#include <string>  

using namespace std;  

  

//**************string******************//  

// ASCII与Unicode互转  

wstring AsciiToUnicode(const string& str);  

string  UnicodeToAscii(const wstring& wstr);  

// UTF8与Unicode互转  

wstring Utf8ToUnicode(const string& str);  

string  UnicodeToUtf8(const wstring& wstr);  

// ASCII与UTF8互转  

string  AsciiToUtf8(const string& str);  

string  Utf8ToAscii(const string& str);  

//**************CString******************//  

// ASCII与Unicode互转  

CStringW    AsciiToUnicode_CSTR(const CStringA& str);  

CStringA    UnicodeToAscii_CSTR(const CStringW& wstr);  

// UTF8与Unicode互转  

CStringW    Utf8ToUnicode_CSTR(const CStringA& str);  

CStringA    UnicodeToUtf8_CSTR(const CStringW& wstr);  

// ASCII与UTF8互转  

CStringA    AsciiToUtf8_CSTR(const CStringA& str);  

CStringA    Utf8ToAscii_CSTR(const CStringA& str);  

/************string-int***************/  

// string 转 Int  

int StringToInt(const string& str);  

string IntToString(int i);  

string IntToString(char i);  

string IntToString(double i);  

cpp文件:UTN.cpp

[cpp] view
plain copy

 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));  

}  

// ASCII与Unicode互转  

CStringW    AsciiToUnicode_CSTR(const CStringA& str) {  

    return AsciiToUnicode(LPCSTR(str)).c_str();  

}  

CStringA    UnicodeToAscii_CSTR(const CStringW& wstr) {  

    return UnicodeToAscii(LPCWSTR(wstr)).c_str();  

}  

// UTF8与Unicode互转  

CStringW    Utf8ToUnicode_CSTR(const CStringA& str) {  

    return Utf8ToUnicode(LPCSTR(str)).c_str();  

}  

CStringA    UnicodeToUtf8_CSTR(const CStringW& wstr) {  

    return UnicodeToUtf8(LPCWSTR(wstr)).c_str();  

}  

// ASCII与UTF8互转  

CStringA    AsciiToUtf8_CSTR(const CStringA& str) {  

    return UnicodeToUtf8_CSTR(AsciiToUnicode_CSTR(str));  

}  

CStringA    Utf8ToAscii_CSTR(const CStringA& str) {  

    return UnicodeToAscii_CSTR(Utf8ToUnicode_CSTR(str));  

}  

// string 与 Int 互转  

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
plain copy

 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());  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: