2012-01-13 1 views
2

Я установил datatype возвращенное значение в файле wsdl, чтобы быть xsd:anyType:Почему webservice не поддерживает акцентированные буквы?

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

PHP функция которой webservice вызов возвращают строку, которая построена из выбранных столбцов из таблицы 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, возникает исключение. Но если я не вставляю никаких подчеркнутых букв в column, тогда веб-сервис в порядке.

Как решить эту проблему с подчеркнутыми буквами?

+0

Я не специалист по php, но, возможно, вы можете кодировать информацию. Специальные символы могут быть проблемой все время при работе с веб-службами. – Ernesto

+1

Какое исключение выбрано? Как выглядит XML-сообщение, полученное с вашего сервера? – DRH

+1

Вы имеете в виду «акцентированные символы». Accentuated будет больше по строкам «жирный», «курсив» и т. Д. Вы проверили, что набор символов соответствует всему контуру http (client-> php-> database-> php-> client)? Единственное изменение набора символов в этой цепочке приведет к искажению данных. –

ответ

3

Текст содержит символы как а, б, в, г, д и е (в вашем случае) и т.д. Все символы, которые система поддерживает вместе образуют набор символов. A кодировка символов затем определяет, как символ сериализуется в представление байта (какое значение, сколько байтов будет хранить значение в и т. Д.).

Здесь вы столкнулись с проблемой, в кодировке. Ваши символы преобразуются в байты, а затем из байтов, которые вы должны вернуть персонажам. Если веб-служба и клиент не используют одну и ту же кодировку символов, веб-служба не может преобразовать байты из клиента в символы и наоборот; вы либо получите ошибки, либо неверные строки символов.

Я не разработчик 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, главным образом потому, что это кодировка, предусмотренная руководством по совместимости веб-службы, а также UTF-16; see rule R1012 of the Basic Profile.

Смежные вопросы