Почему веб-сервис не поддерживает выделенные буквы? - PullRequest
2 голосов
/ 13 января 2012

Я установил datatype возвращаемого значения в файле wsdl равным xsd:anyType:

<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, то с веб-сервисом все в порядке.

Так, как решить эту проблему с акцентуированными буквами?

1 Ответ

3 голосов
/ 15 января 2012

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

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

Я не являюсь разработчиком PHP, но в следующей статье содержится соответствующая информация о решении проблемы: Наборы символов / Проблемы с кодировкой символов .

Эта статья ссылается на еще одну хорошую статью о наборах символов (хотя она несколько устарела, начиная с 2003 года): Абсолютный минимум, который должен знать каждый разработчик программного обеспечения о юникоде и наборах символов (никаких оправданий!) , поэтому убедитесь, что вы прочитали это в первую очередь.

Кодировка, которую вы должны использовать, - UTF-8, в основном потому, что это кодировка, предписанная руководством по взаимодействию веб-служб, вместе с UTF-16; см. Правило R1012 Базового профиля .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...