2011-12-07 1 views
0

間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の後ろにエンコードしてください。

ありがとうございます。

答えて

1

ファイルをUTF-8(私はそれが/tmp/chinese.htmのエンコーディングだと思います)からBIG5に変換する必要があるようです。 iconvと、例えば、ファイルを読み取り、それを再エンコードし、ファイルの内容を変換する

$path = '/tmp/chinese.htm'; 
$buffer = file_get_contents($path); 
$buffer = iconv('UTF-8', 'BIG5', $buffer); 

バッファ$bufferはBIG5に今UTF-8から再エンコードです。

+0

ありがとう@hakreこの特定のケースではiconvが完全に機能するが、他のテスト(他のエンコーディング)がうまく動作しないため、この関数でもiconvを完全に動作させることはできません。さらに、javaクライアントはutf8へのこの変換を実行するだけです。 – doctore

+0

入力のエンコーディングが正しく指定されている限り、 'iconv'に問題はありませんでしたが、私は中国のエンコーディングではあまり働かないのです。いずれにせよ、それはよく作られた図書館なので、私はそれを信じない理由を見ません。それはエラーが見つかった場合に変更することができるフリーソフトです。しかしおそらく私はあなたの根本的な問題を見ていないので、UTF-8からBIG5への再エンコーディングはあなたが直面している唯一の問題ではありません。あなたがもっと詳しく説明すると、私はおそらく何を見て何かヒントを追加することができます。 – hakre

+0

私はHTMLの内容を保存するためにMongoDBを持っています(私はhtmlの構造を分解して個々に作業する必要があります)。このデータベースはUTF8で動作します。このため、iconvを使用してWebページの「元のエンコーディング」をUTF8に変換しようとしましたが、元のコードがutf8よりも多くの文字を持つ場合、この関数は正しく機能しません。このため、このhtmlをunicodeに変換してからMongoDBに保存するよりも、Pythonスクリプトを使用しました。これは私がiconv関数を信頼しない引数です。 – doctore

関連する問題