gcc -o msg stdsoap2.c soapC.c soapClient.c client.c stdsoap2.c
更多使用例子,可以查看gsoap附带的sample目录。
编码转换的例子,保证使用utf8传输
int GBKtoUTF8(char *fromstr,size_t fromlen,char *tostr,size_t tolen)
{
int r;
iconv_t cd;
if ((cd = iconv_open("GBK","UTF-8")) == (iconv_t)-1) {
fprintf(stderr, "iconv_open from UTF to GBK error: %s\n", strerror(errno));
return -1;
}
r = iconv(cd,&fromstr,&fromlen,&tostr,&tolen);
if (r < 0) {
fprintf(stderr, "iconv from UTF to GBK error: %s\n", strerror(errno));
iconv_close(cd);
return -2;
}
iconv_close(cd);
return 0;
}
#include <windows.h>
#include <vector>
#include <string>
using namespace std;
//utf8 转 Unicode
std::wstring Utf82Unicode(const std::string& utf8string)
{
int widesize = ::MultiByteToWideChar(CP_UTF8, 0, utf8string.c_str(), -1, NULL, 0);
if (widesize == ERROR_NO_UNICODE_TRANSLATION)
{
throw std::exception("Invalid UTF-8 sequence.");
}
if (widesize == 0)
{
throw std::exception("Error in conversion.");
}
std::vector<wchar_t> resultstring(widesize);
int convresult = ::MultiByteToWideChar(CP_UTF8, 0, utf8string.c_str(), -1, &resultstring[0], widesize);
if (convresult != widesize)
{
throw std::exception("La falla!");
}
return std::wstring(&resultstring[0]);
}
//unicode 转为 ascii
string WideByte2Acsi(wstring& wstrcode)
{
int asciisize = ::WideCharToMultiByte(CP_OEMCP, 0, wstrcode.c_str(), -1, NULL, 0, NULL, NULL);
if (asciisize == ERROR_NO_UNICODE_TRANSLATION)
{
throw std::exception("Invalid UTF-8 sequence.");
}
if (asciisize == 0)
{
throw std::exception("Error in conversion.");
}
std::vector<char> resultstring(asciisize);
int convresult =::WideCharToMultiByte(CP_OEMCP, 0, wstrcode.c_str(), -1, &resultstring[0], asciisize, NULL, NULL);
if (convresult != asciisize)
{
throw std::exception("La falla!");
}
return std::string(&resultstring[0]);
}
//utf-8 转 ascii
string UTF_82ASCII(string& strUtf8Code)
{
string strRet("");
//先把 utf8 转为 unicode
wstring wstr = Utf82Unicode(strUtf8Code);
//最后把 unicode 转为 ascii
strRet = WideByte2Acsi(wstr);
return strRet;
}
///////////////////////////////////////////////////////////////////////
//ascii 转 Unicode
wstring Acsi2WideByte(string& strascii)
{
int widesize = MultiByteToWideChar (CP_ACP, 0, (char*)strascii.c_str(), -1, NULL, 0);
if (widesize == ERROR_NO_UNICODE_TRANSLATION)
{
throw std::exception("Invalid UTF-8 sequence.");
}
if (widesize == 0)
{
throw std::exception("Error in conversion.");
}
std::vector<wchar_t> resultstring(widesize);
int convresult = MultiByteToWideChar (CP_ACP, 0, (char*)strascii.c_str(), -1, &resultstring[0], widesize);
if (convresult != widesize)
{
throw std::exception("La falla!");
}
return std::wstring(&resultstring[0]);
}
//Unicode 转 Utf8
std::string Unicode2Utf8(const std::wstring& widestring)
{
int utf8size = ::WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, NULL, 0, NULL, NULL);
if (utf8size == 0)
{
throw std::exception("Error in conversion.");
}
std::vector<char> resultstring(utf8size);
int convresult = ::WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, &resultstring[0], utf8size, NULL, NULL);
if (convresult != utf8size)
{
throw std::exception("La falla!");
}
return std::string(&resultstring[0]);
}
//ascii 转 Utf8
string ASCII2UTF_8(string& strAsciiCode)
{
string strRet("");
//先把 ascii 转为 unicode
wstring wstr = Acsi2WideByte(strAsciiCode);
//最后把 unicode 转为 utf8
strRet = Unicode2Utf8(wstr);
return strRet;
}
在编程过程中需要对字符串进行不同的转换,特别是Gb2312和Utf-8直接的转换。在几个开源的魔兽私服中,很多都是老外开发的,而暴雪为了能够兼容世界上的各个字符集也使用了UTF-8。在中国使用VS(VS2005以上版本)开发基本都是使用Gb2312的Unicode字符集,所以当在编程过程中就需要进行字符转换,这样才能兼容游戏,否则就是乱码。而在控制台显示字符串时,真好相反需要将UTF-8的字符串转换成Gb2312才能正常显示。
为了解决这个问题,本人将其代码贴出来;其实很多地方都可以使用到字符串的编码转换,代码如下:
//UTF-8到GB2312的转换
char* U2G(const char* utf8)
{
int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len+1];
memset(wstr, 0, len+1);
MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len+1];
memset(str, 0, len+1);
WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
if(wstr) delete[] wstr;
return str;
}
//GB2312到UTF-8的转换
char* G2U(const char* gb2312)
{
int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len+1];
memset(wstr, 0, len+1);
MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);
len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len+1];
memset(str, 0, len+1);
WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
if(wstr) delete[] wstr;
return str;
}
分享到:
相关推荐
然而,当涉及到字符编码时,如GBK和UTF-8之间的转换,可能会遇到乱码问题。这篇博客文章“eclipse中class乱码GBK-UTF-8转换工具”正是为了解决这个问题。 GBK是GB2312的扩展,包含了更多的汉字和其他字符,主要在...
批量文件GBK-UTF8编码转换器
在IT行业中,理解不同字符编码体系的重要性不言而喻,特别是Unicode、GBK和UTF-8这三种编码方式。下面将详细介绍这三种编码方式,并通过实例进行解析。 首先,Unicode是国际组织制定的一种标准字符集,旨在包含世界...
GBK、UTF-8批量文件3秒快速转码工具(支持GBK,UTF-8免费转换),UTF-8/GBK编码在线转换工具,压缩包可以有多目录与文件,如目录中有图片不会转码,但是会随转码好的文件一起打包下载。 使用帮助 . 上传压缩包(仅支持zip...
在实际应用中,由于GBK编码和UTF-8编码的差异,当GBK编码的文件在UTF-8环境下打开时,可能会出现乱码问题。反之亦然。因此,这样的转换工具就显得十分必要。它可以帮助用户解决不同编码格式之间的兼容性问题,确保...
mySQL数据库latin1-gbk,gbk-utf8,gbk-big5 博文链接:https://kenter1643.iteye.com/blog/121594
在LabVIEW编程环境中,"UTF-8toGBK.vi"这个程序可能是一个用户自定义的VI(Virtual Instrument),用于将UTF-8编码的字符串转换为GBK编码。LabVIEW作为一个图形化编程语言,提供了丰富的字符串处理函数,其中包括了...
GBK和UTF-8是两种常见的文本编码格式,它们在处理中文字符时有着不同的特点。 GBK编码,全称为“汉字内码扩展规范”,是中国大陆广泛使用的汉字编码标准,兼容GB2312,能表示大约2万多个汉字。GBK是在ASCII的基础上...
GBK和UTF-8是两种常见的字符编码格式,它们各有特点并应用于不同的场景。本篇将详细介绍GBK与UTF-8编码的区别,以及如何在C语言中进行这两种编码的转换。 1. **GBK编码** - GBK是中国大陆广泛使用的汉字编码标准,...
GBK和UTF-8是两种广泛使用的字符编码标准,尤其在中国大陆,GBK和UTF-8的转换常常是程序员们面临的问题。标题中的"GBK-UTF8转换工具好用"表明这是一个方便程序员进行编码转换的应用程序,而描述中的"GBK UIF-8转换...
### GBK与UTF-8转码(C++) #### 知识点概述 本文将详细介绍如何在Microsoft Foundation Classes (MFC)环境下实现GBK与UTF-8之间的编码转换。该技术适用于那些需要处理不同字符集数据的应用程序开发场景,特别是在...
GBK和UTF-8是两种广泛使用的字符编码标准,它们各自有不同的特性和应用场景。本文将深入探讨C语言中如何实现GBK与UTF-8的互相转换,同时不依赖任何外部库。 GBK是中国大陆广泛采用的一种汉字编码标准,它是GB2312的...
GBK、GB2312和UTF-8是三种常见的字符编码标准,每种都有其特定的应用场景和特点。C#作为.NET框架下的主要编程语言,提供了丰富的类库支持对不同编码格式之间的转换。 1. **GBK编码**:GBK是中国大陆广泛使用的汉字...
GBK和UTF-8是两种常见的字符编码标准,它们各有特点,但也有各自的适用场景。 GBK全称为“汉字内码扩展规范”,是中国大陆广泛使用的汉字编码标准,它在GB2312的基础上增加了许多汉字和符号,可以容纳20902个汉字,...
在日常工作中,我们可能遇到不同编码格式的文件,如从互联网下载的文本或邮件,这些文件可能采用GBK或BIG5编码,而在UTF-8为主流的现代环境中,我们需要将它们转换为UTF-8才能正常显示和编辑。同样,如果需要向使用...
该插件支持GBK和UTF-8两种编码,这是因为在中国大陆,GBK是较老但仍然广泛使用的编码格式,而UTF-8则是国际通用的标准编码,能表示几乎所有的语言字符。兼容这两种编码,意味着无论用户使用的浏览器设置如何,插件都...
本主题聚焦于从UTF-8编码转换到GBK编码的C语言实现,这对于单片机开发尤其关键,因为单片机往往资源有限,且可能需要支持中文显示。 UTF-8是一种广泛使用的Unicode字符编码方案,它可以表示Unicode字符集中所有的...
GBK,UTF8,编码转换,工具,数据库,模板,网页都可以转换,很方便