文字列「文字を含む」をJava jax-ws SOAPサービスに送信するSilverlightクライアントアプリケーションがあります。.netとJavaの間の文字列エンコーディング
私が何をしていても、私はいつも「文字を含んでいますか?」と「反対側に」を得ています。 ( "â"は働いているが、他の人はそうではない)。
私もHttpUtility.UrlEncode("ş ţ ă and â î")
を銀色で試したことがありますが、JavaのURLDecoder.decode(inputText, "UTF-8")
はまだそれらの3文字の代わりに私に与えています。
何が起こっているのですか? Javaの文字列は、デフォルトでUTF-8でエンコードされているはずです。また、.netのエンコーディングはUnicode(実際はUTF-16)です。しかし、もし私がUnicodeやUTF-16をJava側でデコードすると、それらの特殊文字はすべて「?」になります。
ご迷惑をおかけして申し訳ありません。
[編集]私はSilverlightの側に使用していますどのようなエンコーディング見てみたい、またはエンコーディングを自分で指定します。私が作成したクライアントは、WSDLを指定した参照の追加(Add Reference)です。そこから、.NETは私のためにすべてを行い、クライアントクラスと必要なイベントと関数。クライアントの要点は次のとおりです。
FooWildcardSOAPClient client = new FooWildcardSOAPClient();
client.CallFooServiceCompleted += new EventHandler<CallFooServiceCompletedEventArgs>(client_CallFooServiceCompleted);
client.CallFooServiceAsync(param1, HttpUtility.UrlEncode(inputString), args);
自動生成コードを閲覧しましたが、どこでエンコードを指定するのかわかりませんでした。
そしてここでは、Java側である:
@WebService(targetNamespace = "http://jaxwscalcul.org",
name="FooWildcardSOAP",
serviceName="FooWildcardService")
@SOAPBinding( style=SOAPBinding.Style.DOCUMENT,
use=SOAPBinding.Use.LITERAL)
public class FooWildcardServiceImpl {
@WebMethod(operationName="CallFooService", action="urn:FooWildcardService")
@WebResult(name="result")
public String getOutput(
@WebParam(name="FooServiceWSDL") String param1,
@WebParam(name="inputTextOrXML") String inputText,
@WebParam(name="otherArgsString") String[] otherArgs)
{
try {
inputText = URLDecoder.decode(inputText, "UTF-16LE");//ISO-8859-1
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
System.out.println("\r\n\r\n"+inputText);
}
[EDIT2]私はバイオリンを使用しました、とワイヤ上のコンテンツがtext/xmlでのUTF-8であることを私が見ることができる、とjavaに表示されない "şţă"の文字のような実際のデータは、正しく表示されます。
Client:
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6,ro;q=0.4,fr-FR;q=0.2,de;q=0.2
Entity:
content-type: text/xml; charset=utf-8
あなたは、あなたが正確に前後に行くバイトを教えることができるユーティリティの恩恵を受けるような感じです。 –
私はあなたが文字の内部表現をデフォルトのエンコーディングと混同していると思います。中間的には、すべてのJava文字列はUTF-16として表されますが、これは「デフォルト」エンコーディングとは関係ありません。オプションの 'Charset'または' String'引数(文字セットを指定できるようにする)をとるほとんどのメソッドは、オプションの引数が省略されている場合に** platform **のデフォルトの文字セットを使用します。 –
例:['String#getBytes()'](http://download.oracle.com/javase/6/docs/api/java/lang/String.html#getBytes%28%29)および['String #getBytes(Charset) '](http://download.oracle.com/javase/6/docs/api/java/lang/String.html#getBytes%28java.nio.charset.Charset%29) –