C++中ASCII、unicode与Utf8之间的相互转化
来源:互联网 发布:淘宝华元宠物东西真吗 编辑:程序博客网 时间:2024/06/10 13:48
头文件:UTN.h
- #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- #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转换
- 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());
- }
0 0