微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.net和Java之间的字符串编码

我有一个Silverlight客户端应用程序,它将一个字符串“包括字符şăă和î”发送到Java jax-ws SOAP服务.

现在,无论我做什么,我总是在另一边“包括角色……和—. (“â”工作,但其他人没有).

我甚至在Silverlight中尝试过HttpUtility.UrlEncode(“şţă和â”),但是Java中的URLDecoder.decode(inputText,“UTF-8”)仍然给了我而不是那3个字符.

这是怎么回事? Java字符串认情况下以UTF-8编码,对吧?而.net中的编码是Unicode(实际上是UTF-16).但是,如果我在java端使用Unicode或UTF-16进行解码,我会将所有这些特殊字符转换为?(包括在内).

任何帮助非常感谢!

[编辑]我很想看看我在Silverlight端使用的编码,或者自己指定编码.问题是,我无法弄清楚在哪里/如何做到这一点:我创建的客户端是服务参考 – >在我指定WSDL的地方添加引用,从那里,.NET为我做了一切,创建了一个Client类以及所需的事件和函数.以下是我的客户的主旨:

            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);
    }

[编辑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

解决方法:

通过Luther Blissett’s answer “UTF-16 != UTF-16”

在Java中,getBytes(“UTF-16”)是big-endian.

在C#中,Encoding.Unicode.GetBytes是little-endian.

在Java端,尝试getBytes(“UTF-16LE”).

有关详细说明,请参阅Big and little endian byte order.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐