字符编码转换类(支持多国语言)

头文件StrConvertor.h

/*
*	字符编码转换库,支持多国语言。
*/
#pragma once
#include <string>

class CStrConvertor
{
public:
	CStrConvertor();
	~CStrConvertor();

	std::string UTF8toANSI(const char* lpUTF8);
	std::string UTF8toANSI(const std::string& lpUTF8);
	std::wstring UTF8toUNICODE(const char* lpUTF8);
	std::wstring UTF8toUNICODE(const std::string& lpUTF8);
	std::string ANSItoUTF8(const char* lpANSI);
	std::string ANSItoUTF8(const std::string& lpANSI);
	std::wstring ANSItoUNICODE(const char* lpANSI);
	std::wstring ANSItoUNICODE(const std::string& lpANSI);
	std::string UNICODEtoANSI(const wchar_t* lpUNICODE);
	std::string UNICODEtoANSI(const std::wstring& lpUNICODE);
	std::string UNICODEtoUTF8(const wchar_t* lpUNICODE);
	std::string UNICODEtoUTF8(const std::wstring& lpUNICODE);
};

源文件StrConvertor.cpp

#include "StrConvertor.h"
#include <windows.h>

CStrConvertor::CStrConvertor()
{
}


CStrConvertor::~CStrConvertor()
{
}


std::wstring CStrConvertor::ANSItoUNICODE(const char* lpANSI)
{
	std::wstring szResult = L"";
	int len = strlen(lpANSI);
	int unicode_len = 0;
	unicode_len = MultiByteToWideChar(GetACP(), 0, lpANSI, -1, NULL, 0);

	wchar_t* pUnicode = new wchar_t[unicode_len + 1];
	memset(pUnicode, NULL, (unicode_len + 1)*sizeof(wchar_t));
	MultiByteToWideChar(GetACP(), 0, lpANSI, -1, pUnicode, unicode_len);

	szResult = pUnicode;
	delete[] pUnicode;

	return szResult;
}

std::wstring CStrConvertor::ANSItoUNICODE(const std::string& lpANSI)
{
	return ANSItoUNICODE(lpANSI.c_str());
}

std::string CStrConvertor::UNICODEtoUTF8(const wchar_t* lpUNICODE)
{
	std::string szResult = "";
	int len = wcslen(lpUNICODE);
	int utf8_len = 0;
	utf8_len = WideCharToMultiByte(CP_UTF8, 0, lpUNICODE, -1, NULL, 0, NULL, NULL);

	char* pUTF8 = new char[utf8_len + 1];
	memset(pUTF8, NULL, utf8_len + 1);
	WideCharToMultiByte(CP_UTF8, 0, lpUNICODE, -1, pUTF8, utf8_len, NULL, NULL);

	szResult = pUTF8;
	delete[] pUTF8;

	return szResult;
}

std::string CStrConvertor::UNICODEtoUTF8(const std::wstring& lpUNICODE)
{
	return UNICODEtoUTF8((wchar_t*)lpUNICODE.c_str());
}

std::string CStrConvertor::ANSItoUTF8(const char* lpANSI)
{
	return UNICODEtoUTF8(ANSItoUNICODE(lpANSI));
}

std::string CStrConvertor::ANSItoUTF8(const std::string& lpANSI)
{
	return UNICODEtoUTF8(ANSItoUNICODE(lpANSI));
}

std::wstring CStrConvertor::UTF8toUNICODE(const char* lpUTF8)
{
	std::wstring szResult = L"";
	int len = strlen(lpUTF8);
	int unicode_len = 0;
	unicode_len = MultiByteToWideChar(CP_UTF8, 0, lpUTF8, -1, NULL, 0);

	wchar_t* pUnicode = new wchar_t[unicode_len + 1];
	memset(pUnicode, NULL, (unicode_len + 1)*sizeof(wchar_t));
	MultiByteToWideChar(CP_UTF8, 0, lpUTF8, -1, pUnicode, unicode_len);

	szResult = pUnicode;
	delete[] pUnicode;

	return szResult;
}

std::wstring CStrConvertor::UTF8toUNICODE(const std::string& lpUTF8)
{
	return UTF8toUNICODE(lpUTF8.c_str());
}

std::string CStrConvertor::UNICODEtoANSI(const wchar_t* lpUNICODE)
{
	std::string szResult = "";
	int len = wcslen(lpUNICODE);
	int ansi_len = 0;
	ansi_len = WideCharToMultiByte(GetACP(), 0, lpUNICODE, -1, NULL, 0, NULL, NULL);

	char* pAnsi = new char[ansi_len + 1];
	memset(pAnsi, NULL, ansi_len + 1);
	WideCharToMultiByte(GetACP(), 0, lpUNICODE, -1, pAnsi, ansi_len, NULL, NULL);

	szResult = pAnsi;
	delete[] pAnsi;

	return szResult;
}

std::string CStrConvertor::UNICODEtoANSI(const std::wstring& lpUNICODE)
{
	return UNICODEtoANSI(lpUNICODE.c_str());
}

std::string CStrConvertor::UTF8toANSI(const char* lpUTF8)
{
	return UNICODEtoANSI(UTF8toUNICODE(lpUTF8));
}

std::string CStrConvertor::UTF8toANSI(const std::string& lpUTF8)
{
	return UNICODEtoANSI(UTF8toUNICODE(lpUTF8));
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: VC String 是一种C ++字符,可以处理不同编码字符串,包括多国语言。这意味着VC String可以支持许多不同的字符集,并且可以将数据从一个字符转换为另一个字符集。 VCString使用Unicode,这是一种通用字符编码标准,它可以表示世界上所有语言字符。这意味着无论用户在哪个国家,他们都可以使用他们自己的语言编写和读取字符串。 在多语言应用程序中,VC String特别有用。当应用程序需要处理多种语言时,VC String可以自动检测和转换各种字符集。这样,应用程序就可以在不同的地方运行而不会出现乱码或字符无法识别的问题。 VC String支持的一些字符集包括ASCII、Unicode、UTF-8和UTF-16等等。因此,它可以在处理任何文本数据时都保持准确性和完整性。无论是在开发桌面,移动还是Web应用程序,VC String都是一个强而有力的工具,可确保应用程序的正确性、可靠性和易读性。 ### 回答2: VC++中的字符string可以支持多国语言。因为不同的语言有不同的字符集和编码方式,因此在处理不同语言字符串时需要特别注意编码问题。VC++中的string可以使用多种不同的编码方式,如ASCII编码Unicode编码(UTF-16和UTF-8)等,以支持不同语言字符串处理。 在使用string处理多国语言字符串时,需要根据实际情况选择不同的编码方式,比如在处理中文字符串时常选用UTF-8编码,因为UTF-8可以表示全世界大部分字符,包括中文和日文等字符。而在处理一些欧洲语言时,常选用Unicode UTF-16编码,因为这些语言所使用的字符集较小,可以用UTF-16表示。 除了编码方式外,string还提供了一些成员函数来处理不同语言之间的字符串。比如,可以使用成员函数find或substr来查找和截取字符串中的某个子串,这个子串可以是任何语言字符序列。此外,string还提供了转换函数,如stoi、stof、stod等,可以将包含数字的字符转换为数字型,这些数字型可以在各个国家和地区通用。 总之,VC++中的string支持多国语言处理,可以通过不同编码方式和成员函数,处理各种语言字符串,同时满足不同地区的需求。 ### 回答3: VC++(Visual C++)是一种语言,它可以在Windows操作系统上开发程序。在VC++中,可以使用多种编程语言,如C++、C#、VB等。而其中C++就包含了string,是STL(Standard Template Library)中的一个模板,用于处理字符串。 在VC++中,string可以处理多国语言字符串,包括中文、英文、日文、韩文等。由于不同国家的字符编码不同,所以需要使用不同的编码方式来处理不同语言字符串。 在VC++中,可以使用ANSI、Unicode、UTF-8等不同的编码方式来处理字符串。对于不同的编码方式,需要使用不同的字符集对字符串进行处理。例如,在Unicode编码方式中,一个字符占用两个字节的空间,而在ANSI编码方式中,一个字符占用一个字节的空间。 因此,在使用VC++的string处理多国语言字符串时,需要根据不同的语言字符编码方式来选择合适的字符集和编码方式。对于一些复杂的多字节字符编码方式,例如UTF-8编码方式,需要使用专门的库来进行处理,以保证字符串的正确性和可读性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值