我将datatype
文件中返回值的wsdl
设置为xsd:anyType
:
<message name="getEtapeProspResponse">
<part name="return" type="xsd:anyType"/>
</message>
PHP
函数,webservice
调用返回一个String,该字符串是从MySQL表中的选定列构造的。其中一列的datatype
为text
:
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
中插入任何突出显示的字母,那么网络服务就可以了。
那么如何解决这个突出的字母问题?
答案 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