c# 调用GBK编码的WebService发送数据给服务器时,对方收到数据为乱码,但我收到的返回则没有乱码 WebService调用C#GBK编码服务器方收到乱码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 string strMsg = "中文编码 123a";直接发string你转来转去的根本不对 乱码是被你转换出来的,你直接Encoding.GetEncoding("GBK").GetBytes(strMsg),将得到的字节数组发送出去即可。 接口中需要发送的为string,不能为Byte[],又应该怎么办呢? 我不清楚你是通过什么方式使用Web服务的,如果你是通过项目中添加服务引用使用的,在程序的配置文件中的system.serviceModel配置部分应该有关于网络服务的配置信息,在网络服务的binding配置中,可以使用textEncoding属性,指定传递服务消息使用的XML文本编码,在代码中不用做任何处理,如:<basicHttpBinding> <binding name="WebService1Soap" textEncoding="GB2312"/></basicHttpBinding>参考:http://msdn.microsoft.com/zh-cn/library/system.servicemodel.httpbindingbase.textencoding(v=vs.110).aspx 我是添加服务引用的方式来调用的,按照你的方式测试了,可是修改后在创建调用对象时出现了异常“文本消息格式中使用的文本编码“gb2312”不受支持。参数名: encoding” web服务都是用HttpWebRequest类来请求的,再退一步就是WebClient类来请求,都是支持发送字节数组的,你倒底用的是什么啊?请求方式都不提及,直接一个只能发送字符串谁搞得清?Socket通信的底层走的都是字节,即使只能发送字符串,也有你看不到的字节转换,其中就涉及到字符编码,肯定有地方设置的。 web服务都是用HttpWebRequest类来请求的,再退一步就是WebClient类来请求,都是支持发送字节数组的,你倒底用的是什么啊?请求方式都不提及,直接一个只能发送字符串谁搞得清?Socket通信的底层走的都是字节,即使只能发送字符串,也有你看不到的字节转换,其中就涉及到字符编码,肯定有地方设置的。可以设备,就像5楼说的那样设置,只是设置了后,创建调用对象时出现了异常:“文本消息格式中使用的文本编码“gb2312”不受支持。 参数名: encoding” <?xml version="1.0" encoding="utf-8" ?><configuration> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="External2OssSoapBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <security mode="None"> <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> <message clientCredentialType="UserName" algorithmSuite="Default" /> </security> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="http://172.16.166.203:8002/ei/services/External2Oss" binding="basicHttpBinding" bindingConfiguration="External2OssSoapBinding" contract="ServiceReference1.External2Oss" name="External2Oss" /> </client> </system.serviceModel></configuration>这个是添加服务引用时自动生成的,这样直接发送,无服务就会收到乱码,如果把messageEncoding="Text" textEncoding="utf-8" 改为messageEncoding="Text" textEncoding="gb2312",则会在创建 External2Oss对象时报异常“文本消息格式中使用的文本编码“gb2312”不受支持。 参数名: encoding ” 嗯嗯,查了一下文档,.NET自带的消息编码器好像只支持UTF-8、UTF-16 和 Big Endean Unicode这三种编码,要想使用其他编码,需要自己写一个自定义的消息编码器,在下面的文档里有完整的例子:http://msdn.microsoft.com/en-us/library/ms751486.aspx 配置文件里不支持的话,自己代码里面修改,BasicHttpBinding的TextEncoding是可以设置的,你找到你产生的cs文件后,去找里面修改BasicHttpBinding的地方。我因为不用自动引用很久了,无现成代码可循,你自己找找吧。 已解决,对方的WebService有一定的问题,后面重新引用新的服务后正常了 我想学习下LINUX下的C++变成和SHEll脚本 菜鸟求助 C#2005连接数据库问题 ICSharpCode.SharpZipLib使用问题,解压。 crystallreport 注册码!! 笨问题: rational xde professional的安装程序说我没有vs,极度郁闷 熟悉 Ribbon 的朋友请帮助指点一下 如何在asp.net中,实现调用word来生成word报表文件 我的贴子已结但帖子却显示不了得分???? 【求助】如何获取DataTable表中,去除所有重复项之后的数据,注意:重复的数据不要保留第一个,直接都删除掉 webBrowser怎么让一个段落固定位置不动
直接发string
你转来转去的根本不对
<binding name="WebService1Soap" textEncoding="GB2312"/>
</basicHttpBinding>参考:http://msdn.microsoft.com/zh-cn/library/system.servicemodel.httpbindingbase.textencoding(v=vs.110).aspx
参数名: encoding”
可以设备,就像5楼说的那样设置,只是设置了后,创建调用对象时出现了异常:“文本消息格式中使用的文本编码“gb2312”不受支持。
参数名: encoding”
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="External2OssSoapBinding" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://172.16.166.203:8002/ei/services/External2Oss"
binding="basicHttpBinding" bindingConfiguration="External2OssSoapBinding"
contract="ServiceReference1.External2Oss" name="External2Oss" />
</client>
</system.serviceModel>
</configuration>
这个是添加服务引用时自动生成的,这样直接发送,无服务就会收到乱码,如果把messageEncoding="Text" textEncoding="utf-8" 改为messageEncoding="Text" textEncoding="gb2312",则会在创建 External2Oss对象时报异常“文本消息格式中使用的文本编码“gb2312”不受支持。
参数名: encoding ”
http://msdn.microsoft.com/en-us/library/ms751486.aspx