【问题标题】:c# with SOAP - problem with utf-8 encodingc# with SOAP - utf-8 编码的问题
【发布时间】:2011-04-16 22:22:36
【问题描述】:

我正在使用从 wsdl 到 c# 的自动转换,除了编码之外,任何时候都可以正常工作 我有本地字符(如 'ł' 或 'ó')我得到 '??'在字符串字段中插入它们('G????wny' 而不是 'Główny')。如何处理?服务器发送具有正确编码的文档,带有标题。

编辑:我在 Wireshark 中注意到,从我发送的数据包有 BOM,但发送给我的数据包没有 - 也许这是问题的根源?

【问题讨论】:

  • 请详细说明“从 wsdl 到 c# 的自动转换”的含义。您是否使用了“添加服务参考”?
  • 是的,完全正确。我只给了 wsdl 文档的 url 地址。
  • 一般来说,这应该可以。您需要提供更多详细信息。这是你写的服务吗?你能提供有关服务的详细信息吗?您如何调用服务?
  • 这个服务我没写过,我是通过SoapHttpClientProtocol派生的对象调用的(c#ide生成),我只给它提供cookies容器,然后调用方法,就这样。我查看了数据包上的wireshark,它们被正确编码为utf-8,所以问题在于生成的代码。
  • 问题不大可能出在生成的代码中。它实际上并没有很多。此外,.NET 中的字符串是 Unicode,因此不会丢失特殊字符。

标签: c# soap unicode utf-8 wsdl


【解决方案1】:

所以也许以下内容会有所帮助:

我确定我所做的是:

在webservice PHP文件中,连接Mysql数据库后我调用:

mysql_query("SET CHARSET utf8");

mysql_query("SET NAMES utf8 COLLATE utf8_polish_ci");

我做的第二个:

在同一个 PHP 文件中, 我在 $POST_DATA 变量的服务中添加了utf8_encode

$server->service(utf8_encode($POST_DATA));

class.nusoap_base.php我改了:

`//var $soap_defencoding = 'ISO-8859-1';

var $soap_defencoding = 'UTF-8';`

和olso中的nusoap.php同上:

//var $soap_defencoding = 'ISO-8859-1';

var $soap_defencoding = 'UTF-8';

并再次在nusoap.php 文件中:

var $decode_utf8 = true;

现在我可以发送和接收正确编码的数据了。

希望这会有所帮助。 问候,

【讨论】:

    【解决方案2】:

    问题出在服务器端,在标头中发送了 Content-Type 参数(它被设置为“text/xml”)。对于 utf-8,它必须是“text/xml;charset=utf-8”,其他方法(例如放置 BOM)不正确(根据 RFC 3023)。更多信息在这里:http://annevankesteren.nl/2005/03/text-xml

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-12
      相关资源
      最近更新 更多