【问题标题】:SOAP-ERROR: Encoding: string ... is not a valid utf-8 stringSOAP-ERROR: Encoding: string ... 不是有效的 utf-8 字符串
【发布时间】:2011-11-04 07:51:03
【问题描述】:

您好,我有一个使用 Zend 框架构建的 Web 服务。其中一种方法旨在发送有关订单的详细信息。我遇到了一些编码问题。返回的值之一包含以下内容:

Jaime Torres Bodet #322-A Col. Lomas de Santa María

网络服务返回以下错误:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
         <faultcode>SOAP-ENV:Server</faultcode>
         <faultstring>SOAP-ERROR: Encoding: string 'Jaime Torres Bodet #322-A Col. Lomas de Santa Mar\xc3...' is not a valid utf-8 string</faultstring>
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我应该如何解决这个问题?

谢谢


跟进:问题是由于数据库截断了字符串。该字段设置为 VARCHAR(50),并在编码值的中间被截断。

【问题讨论】:

    标签: web-services zend-framework soap encoding


    【解决方案1】:

    如何更改编码设置:

    服务器:

    $server = new SoapServer("some.wsdl", array('encoding'=>'ISO-8859-1')); // for 'windows-1252' too
    

    客户:

    $server = new SoapClient("some.wsdl", array('encoding'=>'ISO-8859-1')); // for 'windows-1252' too
    

    ...然后自动转换为UTF-8,我遇到了类似的问题,所以这对我有帮助,所以它被测试了

    【讨论】:

      【解决方案2】:

      今天我遇到了同样的问题 - 导致该问题的代码是:

      $request->Text = substr($text, 0, 40);
      

      将 substr 更改为 mb_substr 似乎可以解决问题:

      $request->Test = mb_substr($text, 0, 40, 'utf8');
      

      【讨论】:

        【解决方案3】:

        问题在于 í != i。在请求中使用之前,请尝试将您的字符串转换为 UTF-8。它可能看起来像这样:

        $string = iconv('windows-1252', 'UTF-8', $string);
        

        http://php.net/iconv

        【讨论】:

        • 很公平,但我希望能够发送 í 而不是将其转换为 i ... 因为它是墨西哥地址。
        • 会以í的形式发送,但UTF-8编码,不用担心。
        【解决方案4】:

        上面的答案引导我尝试:

        // encode in UTF-8
        $string = utf8_encode($string);
        

        这也为我解决了错误。

        参考:utf8_encode()

        【讨论】:

          【解决方案5】:

          我使用mb_convert_encodingarray_walk_recursive 解决了这样的问题,以进入我的POST 参数,名为$params(数组)。

          也许这对你有用:

          array_walk_recursive($params,function (&$item){
              $item = mb_convert_encoding($item, 'UTF-8');
          });
          

          【讨论】:

            【解决方案6】:

            我发现在我的情况下不是字符串的编码问题,而是文件本身没有保存为 UTF-8。即使使用 UTF-8 编码进行显式保存也无济于事。

            对我来说,插入一条带有 UTF-8 字符的注释很有效,例如 // Å

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-07-18
              • 2020-05-29
              • 1970-01-01
              • 2011-08-23
              • 2023-03-23
              • 1970-01-01
              • 2013-08-16
              • 2023-03-27
              相关资源
              最近更新 更多