ICE的自动编码转换
来源:互联网 发布:现在开淘宝店卖什么好 编辑:程序博客网 时间:2024/05/19 07:11
Ice是一种面向对象的中间件平台,它适合在异种环境中使用:客户和服务器可以用不同的编程语言编写,可以运行在不同的操作系统和机器架构上,并且可以使用多种网络技术进行通信。无论部署环境如何,这些应用的源码都是可移植的。而且它还是免费的,比较适合于中小型公司,如果是高端需求则可以选择ORACLE公司的Tuxedo。
最近做的项目便使用到了ICE平台,服务端是用C++写(多字节编码),客户端则是android。几天过后服务端终于写完了,于是首先也一样拿C++写了客户端做测试,一切正常。接着开始用JAVA做测试,问题出现了,从JAVA得到结果里的中文全变成了乱码,于是使用new String(strOrgHtml.getBytes("..."), "...")方法进行转码,期间把UTF-8、ISO8859_1、GB2312都换了个便,结果依然是乱码。
立即GOOGLE了许多文章,意思是ICE在传输时使用的是UTF-8编码,但为什么我在JAVA端使用getBytes("UTF-8")后再进行重新编码就是得不到正确结果呢,这个问题百思不得其解,也不想去解了。网上的解决办法是在C++的服务端将所有需要交互的字符串都手动进行UTF-8和GB2312的转换。
我比较喜欢简洁,易维护的代码,所以比较抵制这种手动进行转码方式。想着ICE这么优秀的平台,复杂的工作都完成了,不可能连这个简单的转码没有考虑进去吧,便到官网开始查资料,果不其然,终于查到ICE可以利用邦定转码器来完成所有交互字符串的自动转码。
我的ICE版本为3.3.1,方法是在初始化的时候为InitializationData::stringConverter设定一个转码器,代码如下:
int _tmain(int argc, _TCHAR* argv[])
{
ServerApp app;
Ice::InitializationData initData;
initData.stringConverter = new StringConverterI();// 邦定转码器
initData.properties = Ice::createProperties(initData.stringConverter);
initData.properties->load("config.server");
return app.main(argc, argv, initData);
}
StringConverterI这个就是转码器,实现可以从ICE演示代码“Ice3.3.1\demo\Ice\converter”中获取。(文件为:StringConverterI.h和StringConverterI.cpp)
接着在JAVA端使用下面代码就得到了正确结果。
String strRemark = new String(loginInfo.value.strOrgHtml.getBytes("ISO8859_1"), "GB2312");
最近做的项目便使用到了ICE平台,服务端是用C++写(多字节编码),客户端则是android。几天过后服务端终于写完了,于是首先也一样拿C++写了客户端做测试,一切正常。接着开始用JAVA做测试,问题出现了,从JAVA得到结果里的中文全变成了乱码,于是使用new String(strOrgHtml.getBytes("..."), "...")方法进行转码,期间把UTF-8、ISO8859_1、GB2312都换了个便,结果依然是乱码。
立即GOOGLE了许多文章,意思是ICE在传输时使用的是UTF-8编码,但为什么我在JAVA端使用getBytes("UTF-8")后再进行重新编码就是得不到正确结果呢,这个问题百思不得其解,也不想去解了。网上的解决办法是在C++的服务端将所有需要交互的字符串都手动进行UTF-8和GB2312的转换。
我比较喜欢简洁,易维护的代码,所以比较抵制这种手动进行转码方式。想着ICE这么优秀的平台,复杂的工作都完成了,不可能连这个简单的转码没有考虑进去吧,便到官网开始查资料,果不其然,终于查到ICE可以利用邦定转码器来完成所有交互字符串的自动转码。
我的ICE版本为3.3.1,方法是在初始化的时候为InitializationData::stringConverter设定一个转码器,代码如下:
int _tmain(int argc, _TCHAR* argv[])
{
ServerApp app;
Ice::InitializationData initData;
initData.stringConverter = new StringConverterI();// 邦定转码器
initData.properties = Ice::createProperties(initData.stringConverter);
initData.properties->load("config.server");
return app.main(argc, argv, initData);
}
StringConverterI这个就是转码器,实现可以从ICE演示代码“Ice3.3.1\demo\Ice\converter”中获取。(文件为:StringConverterI.h和StringConverterI.cpp)
接着在JAVA端使用下面代码就得到了正确结果。
String strRemark = new String(loginInfo.value.strOrgHtml.getBytes("ISO8859_1"), "GB2312");
- ICE的自动编码转换
- ICE的消息编码规则
- vim自动编码转换
- ice到restful接口转换的网站
- c# Uri为什么将编码后的字符串自动转换
- ice学习和编码
- 自动将visual stdio创建的文件从gb2312编码转换成utf8编码
- PHP编码转换函数 自动转换字符集支持数组转换
- xmlhttp的编码转换
- 编码的强制转换
- 中文编码的转换
- 编码格式的转换
- 编码之间的转换
- 了解编码的转换
- 编码转换的记录
- RUBY 的编码转换
- 编码的转换
- 网页编码的转换
- 虚拟机(xen)中credit调度算法分析(一)
- 素数
- Introduction to Microsoft Visual Studio(for beginners)step by step
- 自定义标签简介
- Win32汇编中资源的创建与编辑
- ICE的自动编码转换
- http://poj.org/problem?id=3159
- java finalize方法的使用
- 计算机图形学 运用 中点分割直线段裁剪算法原理
- 在SQL Server 2005(2008)中用T-SQL插入中文数据时出现的问号或乱码的解决方案
- 如何选择虚拟机
- int main(int argc,char *argv[])中参数的意义
- 学习
- VC中CPropertySheet 属性对话框