// 多字节编码转为UTF8编码
bool MBToUTF8(vector<char>& pu8, const char* pmb, int32 mLen)
{
// convert an MBCS string to widechar
int32 nLen = MultiByteToWideChar(CP_ACP, 0, pmb, mLen, NULL, 0);
WCHAR* lpszW = NULL;
try
{
lpszW = new WCHAR[nLen];
}
catch(bad_alloc &memExp)
{
return false;
}
int32 nRtn = MultiByteToWideChar(CP_ACP, 0, pmb, mLen, lpszW, nLen);
if(nRtn != nLen)
{
delete[] lpszW;
return false;
}
// convert an widechar string to utf8
int32 utf8Len = WideCharToMultiByte(CP_UTF8, 0, lpszW, nLen, NULL, 0, NULL, NULL);
if (utf8Len <= 0)
{
return false;
}
pu8.resize(utf8Len);
nRtn = WideCharToMultiByte(CP_UTF8, 0, lpszW, nLen, &*pu8.begin(), utf8Len, NULL, NULL);
delete[] lpszW;
if (nRtn != utf8Len)
{
pu8.clear();
return false;
}
return true;
}
// UTF8编码转为多字节编码
bool UTF8ToMB(vector<char>& pmb, const char* pu8, int32 utf8Len)
{
// convert an UTF8 string to widechar
int32 nLen = MultiByteToWideChar(CP_UTF8, 0, pu8, utf8Len, NULL, 0);
WCHAR* lpszW = NULL;
try
{
lpszW = new WCHAR[nLen];
}
catch(bad_alloc &memExp)
{
return false;
}
int32 nRtn = MultiByteToWideChar(CP_UTF8, 0, pu8, utf8Len, lpszW, nLen);
if(nRtn != nLen)
{
delete[] lpszW;
return false;
}
// convert an widechar string to Multibyte
int32 MBLen = WideCharToMultiByte(CP_ACP, 0, lpszW, nLen, NULL, 0, NULL, NULL);
if (MBLen <=0)
{
return false;
}
pmb.resize(MBLen);
nRtn = WideCharToMultiByte(CP_ACP, 0, lpszW, nLen, &*pmb.begin(), MBLen, NULL, NULL);
delete[] lpszW;
if(nRtn != MBLen)
{
pmb.clear();
return false;
}
return true;
}
// 多字节编码转为Unicode编码
bool MBToUnicode(vector<wchar_t>& pun, const char* pmb, int32 mLen)
{
// convert an MBCS string to widechar
int32 uLen = MultiByteToWideChar(CP_ACP, 0, pmb, mLen, NULL, 0);
if (uLen<=0)
{
return false;
}
pun.resize(uLen);
int32 nRtn = MultiByteToWideChar(CP_ACP, 0, pmb, mLen, &*pun.begin(), uLen);
if (nRtn != uLen)
{
pun.clear();
return false;
}
return true;
}
//Unicode编码转为多字节编码
bool UnicodeToMB(vector<char>& pmb, const wchar_t* pun, int32 uLen)
{
// convert an widechar string to Multibyte
int32 MBLen = WideCharToMultiByte(CP_ACP, 0, pun, uLen, NULL, 0, NULL, NULL);
if (MBLen <=0)
{
return false;
}
pmb.resize(MBLen);
int nRtn = WideCharToMultiByte(CP_ACP, 0, pun, uLen, &*pmb.begin(), MBLen, NULL, NULL);
if(nRtn != MBLen)
{
pmb.clear();
return false;
}
return true;
}
// UTF8编码转为Unicode
bool UTF8ToUnicode(vector<wchar_t>& pun, const char* pu8, int32 utf8Len)
{
// convert an UTF8 string to widechar
int32 nLen = MultiByteToWideChar(CP_UTF8, 0, pu8, utf8Len, NULL, 0);
if (nLen <=0)
{
return false;
}
pun.resize(nLen);
int32 nRtn = MultiByteToWideChar(CP_UTF8, 0, pu8, utf8Len, &*pun.begin(), nLen);
if(nRtn != nLen)
{
pun.clear();
return false;
}
return true;
}
// Unicode编码转为UTF8
bool UnicodeToUTF8(vector<char>& pu8, const wchar_t* pun, int32 uLen)
{
// convert an widechar string to utf8
int32 utf8Len = WideCharToMultiByte(CP_UTF8, 0, pun, uLen, NULL, 0, NULL, NULL);
if (utf8Len<=0)
{
return false;
}
pu8.resize(utf8Len);
int32 nRtn = WideCharToMultiByte(CP_UTF8, 0, pun, uLen, &*pu8.begin(), utf8Len, NULL, NULL);
if (nRtn != utf8Len)
{
pu8.clear();
return false;
}
return true;
}
分享到:
相关推荐
《超级批量编码转换 1.0》是一款专为办公领域设计的高效实用工具,它能够帮助用户快速地处理大量文件的编码转换问题。在日常工作中,我们常常会遇到不同编码格式的文本文件,如ASCII、UTF-8、GBK等,这些不同的编码...
在处理字符串和文本数据时,字符编码转换是一个常见的需求,因为不同的系统和应用可能使用不同的字符编码标准来表示文本。本资源提供了易语言字符编码转换的源码,帮助开发者理解和实现这一功能。 字符编码是用来...
在提供的压缩包文件"redis编码转换器.exe"中,可能包含了一个实际的工具,用于帮助开发者在C#环境中方便地进行Redis数据的编码转换。使用这样的工具可以简化编码转换的过程,提高开发效率。在使用前,务必了解其具体...
《超级批量编码转换工具》是一款专门针对文件编码转换问题而设计的强大工具,尤其适用于处理大量文件从一种编码格式转换到另一种编码格式的情况。在信息化高度发达的今天,各种编码格式的兼容性和统一性成为了数据...
在这个场景中,“CTF Converter 编码转换”指的是在CTF比赛中可能会遇到的一种工具或技术,它用于处理不同类型的编码和编码格式,帮助参赛者解密或解码隐藏的信息。 编码转换是信息安全领域中的一个关键概念,尤其...
在Java编程语言中,文件编码转换是一个常见的任务,特别是在处理多国语言或者处理不同系统间的文件传输时。本文将深入探讨如何使用Java实现文件编码的转换,主要关注GB2312、UTF-8这两种常见编码格式之间的转换。 ...
**iconv 文件编码转换** 在信息技术领域,文件编码转换是一个重要的任务,特别是在处理不同系统、不同语言或不同软件之间的数据交换时。`iconv` 是一个广泛使用的命令行工具,用于在各种字符编码之间进行转换,确保...
易语言UTF-8编码转换工具是一款专为编程者和数据处理人员设计的实用软件,它主要功能是将文本文件在不同编码格式之间进行转换,尤其是针对UTF-8编码的处理。在信息技术领域,字符编码是一种重要的技术,用于规定如何...
Charset(Chrome网页编码转换工具)是一款简单易用、功能强大的chrome网页编码转换工具,主要能通过内置的二十多种网页编码,将网站设置不规范而出现乱码的网页转换编码使之成为能够浏览的页面,在安装了这款插件后,...
本文将深入探讨“文字编码转换工具”的重要性、原理以及它支持的各种编码格式,如Native、Unicode(包括UTF-8)等。 首先,让我们了解什么是文字编码。在计算机中,文字是以二进制的形式存在的,而文字编码就是将...
X 官方 GBK/UTF8编码转换工具详解》 Discuz! X 是一款广泛应用的开源社区论坛软件,它为用户提供了一个高效、功能丰富的互动平台。在使用过程中,由于历史原因或者不同环境的需求,我们可能会遇到论坛数据编码格式...
### JS实现URL编码转换中文 在Web开发过程中,经常需要处理URL中的特殊字符,特别是中文字符。由于URL传输限制及浏览器解析原因,中文等非ASCII字符需要被编码为特定格式才能在网络上传输。本文将详细介绍如何使用...
在IT行业中,编码转换是一个非常重要的主题,尤其是在处理多语言或者跨平台的游戏开发时。Unicode编码转换是确保不同操作系统、编程语言以及设备间文本数据兼容性的关键步骤。在这个场景下,“游戏通用Unicode编码...
根据提供的文件信息,本文将详细解释C++中几种常见的字符编码转换方法,特别是涉及Unicode与UTF-8之间的转换。在实际开发过程中,由于不同的系统、软件可能会采用不同的字符编码方式来存储文本数据,因此实现不同...
在IT领域,编码转换工具是不可或缺的实用程序,尤其对于处理多语言或跨平台的数据时。标题"各种格式编码转换工具"明确指出我们要探讨的是一个能够处理多种编码格式的软件,而描述则强调了该工具的功能,即自动、批量...
综上所述,"网页编码转换工具GB2312转换UTF-8"是一个实用的工具,它简化了不同编码格式之间的转换过程,尤其在处理大量中文文本时,其批量转换功能显得尤为高效。无论是网页开发者、内容创作者还是数据管理人员,都...
在IT行业中,编码转换是一个常见的任务,特别是在处理中文字符时。GBK编码是GB2312编码的扩展,用于表示更多的汉字和符号,是简体中文环境下广泛使用的一种字符编码。VC++,作为Microsoft的C++开发环境,提供了丰富...
【标题】"Discuz 提供的编码转换工具"涉及到的是网站论坛系统Discuz!中的一种常见操作,即字符编码的转换。在互联网发展的初期,不同的字符编码标准(如GBK和UTF-8)导致了跨平台、跨语言交流时的数据不兼容问题。...
在C语言中,进行字符编码转换通常涉及到内存操作和位操作,因为C语言没有内置的字符串类或者编码转换函数。以下是一些基本步骤: 1. **读取原始编码**:首先,你需要读取源文件或字符串,确定其当前的编码格式。这...
编码转换是IT领域中一个非常基础且重要的概念,特别是在处理多语言、网络传输以及数据存储时。本小工具是一款基于Microsoft .NET Framework 3.5的Windows桌面应用程序(Winform程序),专门用于实现HTML编码、...