如何解决WebService参数传递中文的问题

如何解决WebService参数传递中文的问题,第1张

很多人在调用WebService所提供方法的时候,发现如果当字符串中含有中文,传到WebService端就发现是乱码,这是由于WebService默认的编码是UTF-8
,当调用端和接收端用不同编码进行转换的时候,就会出现此类问题,如何解决这类问题呢,具体要根据你的环境而定。如果WebService的代码是你可控的,那么修改起来很简单,只需要把WebService工程中的webconfig文件进行修改,即把使用到utf-8地方改成gb2312就行了。如果WebService的代码是你不可控的,即你无法去修改WebService工程中的webconfig文件,那么做起来就比较费事了,就是你需要亲自把当前字符串转换成UTF-8的编码,具体如下:///<summary///Change string from default encoding to UTF-8 encoding///</summary///<param name=sValue
the string to be changed</param///<returns
if changed successfully, return string under UTF-8 encoding;///
else return null///</returnspublicstaticstringGetUnicodeString(stringsValue ){
Encoding def = EncodingDefault;
Encoding unicode = EncodingUTF8;
// Check whether default encoding is same as UTF-8 encodingif( def == unicode )returnsValue;
// Check parameterif( sValue ==null|| sValueLength == 0 )returnsValue;
// Convert the string into a byte[]byte[] defBytes = defGetBytes( sValue );
// Perform the conversion from one encoding to the otherbyte[] unicodeBytes = EncodingConvert( def, unicode, defBytes);char[] uniChars =newchar[ unicodeBytesLength] ;for(inti = 0; i < unicodeBytesLength; i++ )
uniChars[i] = (char)(unicodeBytes[i]);returnnewstring( uniChars );}那么调用WebService之前,需要把含有中文的字符串用以上的函数进行转换,然后用转换后的字符串去调用WebService
,就可以避免在WebService中出现乱码现象。

你要在webservice中编写相应的调用存储过程的接口,具体看你应用的什么语言技术。比如下面java调用存储过程如下:
Session session = HibernateSessionFactorygetSession();
//连接对象
Connection conn = null;
//数据集对象
ResultSet rs = null;
//用来取得表列明的 对象
ResultSetMetaData rsmd = null;
CallableStatement proc = null;
conn = sessionconnection();
connsetAutoCommit(false);
try {

if (conn != null) {
proc = connprepareCall("{call 存储过程包名过程名(n个传入参数对应n个问号,返回参数或游标占位) }");
// 如下过程PKG_GETDATA有4个传入参数,所有在程序包是PKG_QUERY
//proc = connprepareCall("{call PKG_QUERYPKG_GETDATA(,,,,) }");
procsetString(1, 参数);
//依次按照传入参数顺序与问号位置传入所有参数
//最后传入n个参数后一位的返回游标
//procregisterOutParameter(n+1, oraclejdbcOracleTypesCURSOR);
procexecute();
rs = (ResultSet) procgetObject(n+1);
conncommit();
}
可以将上面代码写成一个公用的调用存储过程的通用接口。
别人调用你的webservice 可以具体的参数个数及顺序传递给你的接口,也可以传递一个object数组


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10294339.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-07
下一篇 2023-05-07

发表评论

登录后才能评论

评论列表(0条)

保存