我有一個Silverlight客戶端應用程序,它將字符串「包括字符和數字」發送到Java jax-ws SOAP服務。.net和Java之間的字符串編碼
現在,無論我做什麼,我總是會在另一邊「包括角色??和â」。 (「â」工作但其他人不)。
我甚至已經在Silverlight中嘗試了HttpUtility.UrlEncode("ş ţ ă and â î")
,但是在Java中的URLDecoder.decode(inputText, "UTF-8")
仍然給我用來代替這3個字符。
這是怎麼回事? Java字符串應該默認以UTF-8編碼,對吧?而.net中的編碼是Unicode(實際上是UTF-16)。但是如果我在java端使用Unicode或UTF-16進行解碼,我會得到所有這些特殊字符轉向?(包括)。
任何幫助,非常感謝!
[編輯]我很想看到我使用的Silverlight的側什麼編碼,或指定一個編碼自己。問題是,我找不到在哪裏/如何做到這一點:我創建的客戶端是通過服務引用 - >添加引用來指定WSDL,並從那裏開始,.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」參數(允許指定要使用的字符集)的方法將在省略可選參數時使用**平臺**默認字符集。 –
例如:['字符串#的getBytes()'](http://download.oracle.com/javase/6/docs/api/java/lang/String.html#getBytes%28%29)和['字符串#getBytes(Charset)'](http://download.oracle.com/javase/6/docs/api/java/lang/String.html#getBytes%28java.nio.charset.Charset%29) –