java客户端和vc程序通信时的编码问题
2015-10-23 10:40
671 查看
java客户端使用utf-8编码,而vc程序默认是gbk编码格式,两者通信时,如果含有中文,将出现乱码。
解决方式1:java客户端使用GBK编码
可参照:
http://www.cnblogs.com/kenkofox/archive/2010/04/25/1719649.html
1 byte[] responseBuffer = newClientRequestHandler(message).response().getBytes("GB2312");
2 out.write(responseBuffer, 0,responseBuffer.length);
解决方式2:vc程序进行utf-8和gbk编码的转换
string CCommonHelper::ConvertGBKToUtf8(CString& strGBK) {
int len=MultiByteToWideChar(CP_ACP, 0, (char*)CStrToStr(strGBK).c_str()/*(LPCTSTR)strGBK*/, -1, NULL,0);
unsigned short * wszUtf8 = new unsigned short[len+1];
memset(wszUtf8, 0, len * 2 + 2);
MultiByteToWideChar(CP_ACP, 0, (char*)CStrToStr(strGBK).c_str()/*(LPCTSTR)strGBK*/, -1, (LPWSTR)wszUtf8, len);
len = WideCharToMultiByte(CP_UTF8, 0, (LPWSTR)wszUtf8, -1, NULL, 0, NULL, NULL);
char *szUtf8=new char[len + 1];
memset(szUtf8, 0, len + 1);
WideCharToMultiByte (CP_UTF8, 0, (LPWSTR)wszUtf8, -1, szUtf8, len, NULL,NULL);
strGBK = szUtf8;
//delete[] szUtf8;
delete[] wszUtf8;
return szUtf8;
}
void CCommonHelper::ConvertUtf8ToGBK(CString& strUtf8) {
int len=MultiByteToWideChar(CP_UTF8, 0, (char*)CStrToStr(strUtf8).c_str()/*(LPCTSTR)strUtf8*/, -1, NULL,0);
unsigned short * wszGBK = new unsigned short[len+1];
memset(wszGBK, 0, len * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0, (char*)CStrToStr(strUtf8).c_str()/*(LPCTSTR)strUtf8*/, -1, (LPWSTR)wszGBK, len);
len = WideCharToMultiByte(CP_ACP, 0, (LPWSTR)wszGBK, -1, NULL, 0, NULL, NULL);
char *szGBK=new char[len + 1];
memset(szGBK, 0, len + 1);
WideCharToMultiByte (CP_ACP, 0, (LPWSTR)wszGBK, -1, szGBK, len, NULL,NULL);
strUtf8 = szGBK;
delete[] szGBK;
delete[] wszGBK;
}
调用:string strUtf8 = ConvertGBKToUtf8(Command);
另附上Unicode和utf-8之间的转换:
int CCommonHelper::Unicode2Utf8(const char* unicode, char *szUtf8, int _iMaxLen)
{
__try
{
int len;
len = WideCharToMultiByte(CP_UTF8, 0, (const wchar_t*)unicode, -1, NULL, 0, NULL, NULL);
if (_iMaxLen < len)
{
len = _iMaxLen - 1;
}
memset(szUtf8, 0, len + 1);
WideCharToMultiByte(CP_UTF8, 0, (const wchar_t*)unicode, -1, szUtf8, len, NULL,NULL);
return len;
}
__except(1)
{
return 0;
}
}
//UTF8转成Unicode
wchar_t * CCommonHelper::UTF8ToUnicode( const char* str )
{
int textlen = 0;
wchar_t * result;
textlen = MultiByteToWideChar( CP_UTF8, 0, str,-1, NULL,0 );
result = (wchar_t *)malloc((textlen+1)*sizeof(wchar_t));
memset(result,0,(textlen+1)*sizeof(wchar_t));
MultiByteToWideChar(CP_UTF8, 0,str,-1,(LPWSTR)result,textlen );
return result;
}
解决方式1:java客户端使用GBK编码
可参照:
http://www.cnblogs.com/kenkofox/archive/2010/04/25/1719649.html
1 byte[] responseBuffer = newClientRequestHandler(message).response().getBytes("GB2312");
2 out.write(responseBuffer, 0,responseBuffer.length);
解决方式2:vc程序进行utf-8和gbk编码的转换
string CCommonHelper::ConvertGBKToUtf8(CString& strGBK) {
int len=MultiByteToWideChar(CP_ACP, 0, (char*)CStrToStr(strGBK).c_str()/*(LPCTSTR)strGBK*/, -1, NULL,0);
unsigned short * wszUtf8 = new unsigned short[len+1];
memset(wszUtf8, 0, len * 2 + 2);
MultiByteToWideChar(CP_ACP, 0, (char*)CStrToStr(strGBK).c_str()/*(LPCTSTR)strGBK*/, -1, (LPWSTR)wszUtf8, len);
len = WideCharToMultiByte(CP_UTF8, 0, (LPWSTR)wszUtf8, -1, NULL, 0, NULL, NULL);
char *szUtf8=new char[len + 1];
memset(szUtf8, 0, len + 1);
WideCharToMultiByte (CP_UTF8, 0, (LPWSTR)wszUtf8, -1, szUtf8, len, NULL,NULL);
strGBK = szUtf8;
//delete[] szUtf8;
delete[] wszUtf8;
return szUtf8;
}
void CCommonHelper::ConvertUtf8ToGBK(CString& strUtf8) {
int len=MultiByteToWideChar(CP_UTF8, 0, (char*)CStrToStr(strUtf8).c_str()/*(LPCTSTR)strUtf8*/, -1, NULL,0);
unsigned short * wszGBK = new unsigned short[len+1];
memset(wszGBK, 0, len * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0, (char*)CStrToStr(strUtf8).c_str()/*(LPCTSTR)strUtf8*/, -1, (LPWSTR)wszGBK, len);
len = WideCharToMultiByte(CP_ACP, 0, (LPWSTR)wszGBK, -1, NULL, 0, NULL, NULL);
char *szGBK=new char[len + 1];
memset(szGBK, 0, len + 1);
WideCharToMultiByte (CP_ACP, 0, (LPWSTR)wszGBK, -1, szGBK, len, NULL,NULL);
strUtf8 = szGBK;
delete[] szGBK;
delete[] wszGBK;
}
调用:string strUtf8 = ConvertGBKToUtf8(Command);
另附上Unicode和utf-8之间的转换:
int CCommonHelper::Unicode2Utf8(const char* unicode, char *szUtf8, int _iMaxLen)
{
__try
{
int len;
len = WideCharToMultiByte(CP_UTF8, 0, (const wchar_t*)unicode, -1, NULL, 0, NULL, NULL);
if (_iMaxLen < len)
{
len = _iMaxLen - 1;
}
memset(szUtf8, 0, len + 1);
WideCharToMultiByte(CP_UTF8, 0, (const wchar_t*)unicode, -1, szUtf8, len, NULL,NULL);
return len;
}
__except(1)
{
return 0;
}
}
//UTF8转成Unicode
wchar_t * CCommonHelper::UTF8ToUnicode( const char* str )
{
int textlen = 0;
wchar_t * result;
textlen = MultiByteToWideChar( CP_UTF8, 0, str,-1, NULL,0 );
result = (wchar_t *)malloc((textlen+1)*sizeof(wchar_t));
memset(result,0,(textlen+1)*sizeof(wchar_t));
MultiByteToWideChar(CP_UTF8, 0,str,-1,(LPWSTR)result,textlen );
return result;
}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统