Spe*_*ump 4 .net java silverlight character-encoding
我有一个Silverlight客户端应用程序,它将一个字符串"包括字符şăă和î"发送到Java jax-ws SOAP服务.
现在,无论我做什么,我总是在另一边"包括角色......和â€".("â"工作,但其他人没有).
我甚至尝试HttpUtility.UrlEncode("? ? ? and â î")过silverlight,但是URLDecoder.decode(inputText, "UTF-8")在Java中仍然给了我?而不是那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);
Run Code Online (Sandbox Code Playgroud)
我浏览了自动生成的代码,但无法确定指定编码的位置.
这是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);
}
Run Code Online (Sandbox Code Playgroud)
[编辑2]我使用过Fiddler,我可以看到线上的内容是text/xml UTF-8,以及实际数据,如在java中没有显示的"şţă"字符,DO正确显示在电线上.
这是来自Fiddler的一些糊状物:
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
Run Code Online (Sandbox Code Playgroud)
通过Luther Blissett的回答"UTF-16!= UTF-16":
在Java中,getBytes("UTF-16")是big-endian.
在C#中,Encoding.Unicode.GetBytes是little-endian.
在Java端,尝试getBytes("UTF-16LE").
有关详细说明,请参阅大端和小端字节顺序.
| 归档时间: |
|
| 查看次数: |
3171 次 |
| 最近记录: |