間base64BinaryのSOAPのパラメータを送信します。もちろん、HTMLは異なるエンコーディングでコーディングできますが、このパラメータはのbase64Binaryタイプであり、問題なく「ネイティブエンコーディング」でHTMLを受け取ります。は、私はhtmlページのコンテンツを送信(WSDLと<strong>nuSOAP</strong>を使用して)<strong>PHP SOAP</strong>サーバーを持つJavaクライアントとPHPサーバー
証明するために、という3つのSOAPクライアントをPHP、C#、Java 6でコーディングしました。最初の2つは問題ありません。 Javaクライアントが、それはこのようなものだwsimportの2.1とコードの例を用いて行った。
FileInputStream file = new FileInputStream (new File ("/tmp/chinese.htm"));
BufferedReader buffer = new BufferedReader (new InputStreamReader (file
,"BIG5"));
String line;
String content = "";
while ((line = buffer.readLine()) != null)
content += line+"\n";
FileManagerAPI upload = new FileManagerAPI();
FileManagerAPIPortType servUpload = upload.getFileManagerAPIPort();
BigInteger result = servUpload.apiControllerServiceUploadHTML (
"http://www.test.tmp/因此鳥哥建議您務.html", content.getBytes());
問題は前にbase64エンコードでHTMLを送信することで、唯一のJavaクライアントは、UTF8にHTMLコンテンツをエンコードし、 PHPがこのファイルを受け取ると、サーバーは "BIG5ファイル"とは異なり、 "UTF8アーカイブ"のように管理します。
質問は、最初のUTF8エンコーディングを避ける方法は?、または少なくともutf-8をbase64の後ろにエンコードしてください。
ありがとうございます。
ありがとう@hakreこの特定のケースではiconvが完全に機能するが、他のテスト(他のエンコーディング)がうまく動作しないため、この関数でもiconvを完全に動作させることはできません。さらに、javaクライアントはutf8へのこの変換を実行するだけです。 – doctore
入力のエンコーディングが正しく指定されている限り、 'iconv'に問題はありませんでしたが、私は中国のエンコーディングではあまり働かないのです。いずれにせよ、それはよく作られた図書館なので、私はそれを信じない理由を見ません。それはエラーが見つかった場合に変更することができるフリーソフトです。しかしおそらく私はあなたの根本的な問題を見ていないので、UTF-8からBIG5への再エンコーディングはあなたが直面している唯一の問題ではありません。あなたがもっと詳しく説明すると、私はおそらく何を見て何かヒントを追加することができます。 – hakre
私はHTMLの内容を保存するためにMongoDBを持っています(私はhtmlの構造を分解して個々に作業する必要があります)。このデータベースはUTF8で動作します。このため、iconvを使用してWebページの「元のエンコーディング」をUTF8に変換しようとしましたが、元のコードがutf8よりも多くの文字を持つ場合、この関数は正しく機能しません。このため、このhtmlをunicodeに変換してからMongoDBに保存するよりも、Pythonスクリプトを使用しました。これは私がiconv関数を信頼しない引数です。 – doctore