WebService は、誰もがよく知っているはずですが、「サービス プロバイダー」が「サービス呼び出し元」にサービスを提供する方法です。それにはいくつかの主要なテクノロジーがあります:
XML: データを記述するための標準メソッド
SOAP: 情報交換に使用されるシンプル オブジェクト アクセス プロトコル
WSDL: Web サービス記述言語
UDDI: ユニバーサル記述、検出、統合。インターネット上の商取引を記述するための、プラットフォームに依存しない XML ベースのプロトコル。
SOAP はデフォルトで UTF-8 エンコーディングを送信します。これにより、WebService もデフォルトで UTF-8 エンコーディングを使用することが決まります。
現在メンテナンスしているプロジェクトはPHPプロジェクトであり、すべてのコーディングでGBKを使用していますが、それ自体が提供するWebServiceメソッドを呼び出すと、コーディングの問題が発生します。 PHP ページは WebService を呼び出し、この WebService は COM コンポーネントを呼び出す別の PHP クラスを呼び出します。おそらくこれがその場面だろう。
コードをコピーします コードは次のとおりです:
PHP ページ (GBK) -> WebService (UTF-8) -> PHP クラス (GBK)
問題が発生する前は、すべてが次のとおりでした。はい、そうやって何年も経ちました。ある日、同社はサービスを統合するために、元の会社のユーザー情報もすべて英語と数字で構成されていましたが、買収された会社はそのような制限を設けていませんでした。アカウントには漢字の大文字と小文字が含まれていました。統合後、「メッセージ解析エラー: SOAP ペイロードの行 1 解析 XML エラー: 無効な文字 [詳細]」という問題が発生しました。
私はPHPに触れたばかりなのであまり詳しくなく、NetBeansのデバッグは非常に難しいです。したがって、VS を開いて WebService を参照し、テストを開始します。返された結果はユーザーを見つけることができず、文字化けしています。調べてみると、WebService の UTF-8 エンコーディングが PHP クラスに渡されるときに、エンコーディングが一貫していないことが原因です。 GBKに変換して送信すると、データを受信したところ、ユーザーは判明しましたが、やはり文字化けしてしまいます。返されたデータを再度 UTF-8 に変換すると、すべて OK になります。 VS でテストしたところ、すべて正常でした。テストマシンに乗り込みます!テストを開始してください!開いたら文字化け!まだ「メッセージ解析中のエラー: 1 行目の SOAP ペイロード解析中の XML エラー: 無効な文字 [詳細]」
落ち着いて分析を続けてください。 WebService を呼び出す PHP ページが原因であるはずです。 VS 上のテストページは UTF-8 で問題ありませんが、PHP 上のページは GBK です。もう一度見直したら、すべてが再び落ち着いた。
コードをコピーします コードは次のとおりです:
呼び出し: PHP ページ、パラメータは UTF-8 に変換され、GBK クラスに変換されます -> 戻り値: PHP クラス -> ; WebService、受信後、UTF-8 に変換 -> GBK に変換
http://www.bkjia.com/PHPjc/321952.html
www.bkjia.comtruehttp://www.bkjia.com/PHPjc/321952.html技術記事 WebService は、誰もがよく知っているはずですが、「サービス プロバイダー」が「サービス呼び出し元」にサービスを提供する方法です。これには、いくつかの主要なテクノロジーが含まれています: XML: データを記述するための標準...