为什么Web服务不支持带重音的字母?

时间:2012-01-13 14:19:35

标签: php mysql web-services java-me wsdl

我将datatype文件中返回值的wsdl设置为xsd:anyType

<message name="getEtapeProspResponse">
    <part name="return" type="xsd:anyType"/>
</message>

PHP函数,webservice调用返回一个String,该字符串是从MySQL表中的选定列构造的。其中一列的datatypetext

function getEtapeProsp($user,$motpasse)
    {
        $user_code    = verifyUser($user, $motpasse) ;
        $resultat="";
        if ( $user_code != null) 
        {
            $datejour = date("Y-m-d");
            $connec   = mysql_connect("192.168.1.123:3306", "root", "mysqlroot");
            mysql_select_db("finance",$connec);
            $query    = mysql_query("SELECT * FROM etape_prospection INNER JOIN type_prospection ON etape_prospection.type_prosp_id = type_prospection.type_prosp_id WHERE prosp_id IN (SELECT prosp_id FROM transfert WHERE user_code ='".$user_code ."' AND date_transfert='".$datejour."') order by etape_prospection.prosp_id");
            while($ligne = mysql_fetch_array($query))
                {
                     $resultat .= $ligne['etape_prosp_id'].';';
                     $resultat .= $ligne['type_prosp_lib'].';';
                     $resultat .= convertDateFormatHH($ligne['etape_prosp_date']).';';
                     $resultat .= $ligne['etape_prosp_comment'].';'; // this is the text column
                     $resultat .= $ligne['prosp_id'].';';
                     $resultat .= "\r\n";
                }
        }
        else
        {
            $resultat = "Login ou mot de passe incorrect" ;
        }
        return $resultat;
    }

在数据库中,“etape_prosp_comment”的值有一个突出显示的字母é。 问题是,当我从J2ME应用程序调用Web服务时,会抛出异常。但如果我没有在column中插入任何突出显示的字母,那么网络服务就可以了。

那么如何解决这个突出的字母问题?

1 个答案:

答案 0 :(得分:3)

文本包含字符,如a,b,c,d,e或é(在您的情况下)等。系统支持的所有字符一起形成字符集 。然后,字符编码定义字符如何被序列化为字节表示(值是什么值,该值将存储在多少字节中等)。

这是您在编码中遇到问题的地方。您的字符将转换为字节,然后从您必须返回字符的字节转换。如果Web服务和客户端不使用相同的字符编码,则Web服务无法将客户端的字节转换为字符,反之亦然;您将收到错误或格式错误的字符串。

我不是PHP开发人员,但以下文章包含有关解决此问题的一些相关信息:Character Sets / Character Encoding Issues

那篇文章引用了另一篇关于字符集的好文章(尽管从2003年开始有点陈旧):The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!),所以请务必先阅读。

您应该使用的编码是UTF-8,主要是因为这是Web服务互操作性指南要求的编码,以及UTF-16; see rule R1012 of the Basic Profile