【问题标题】:JAX-WS and character encoding questionsJAX-WS 和字符编码问题
【发布时间】:2010-07-23 14:02:10
【问题描述】:

我有一个关于在 Web 服务中将 XML 作为字符串发送的问题。我们的一个供应商开发了一个我们应该使用的网络服务。他们的网络服务基本上只是他们自己的请求/响应消息的传输机制,例如MyRequest 类被序列化为 XML 字符串,使用 JAXB 传递给他们的 web 服务中的 setRequest 方法,可能是因为这对他们来说是最简单的方法,或者可能是因为他们希望在他们的应用程序中实现高透明度......好吧我不知道。

无论如何。这是我的问题。

如果我有一个具有 ISO_8859-1 字符编码的 Web 服务,但序列化的 XML 具有一个字符编码 UTF-8(或任何其他支持比 ISO_8859-1 更多字符的编码),这些是否总是能正确序列化和反序列化?还是我必须发送有关字符串内容的信息?如果是这样,我该怎么做?

Web 服务的服务器端是用 .NET 编写的。 Java 和 .NET 之间的兼容性如何? .NET 中是否存在 Java 不支持的编码,反之亦然?

/安德烈亚斯

【问题讨论】:

    标签: java wcf encoding web-services jax-ws


    【解决方案1】:

    如果他们正确地实现了网络服务(你也这样做了),那么你就不必担心字符编码,因为:

    1. (格式正确)XML 具有内置的元数据,可以准确找出曾经使用的字符编码,并且
    2. 由于numeric character references,XML 允许以任何编码表示任何 Unicode 字符

    总结一下:确保双方都在支持 Unicode 的环境中处理他们的文本(C# 和 Java 对此很好)并使用正确的 XML 库(两种环境都带有这些),并且只要你不弄乱手动设置,应该没问题。

    【讨论】:

    • 好的,所以如果 web 服务的字符编码为 UTF_8859-1 并且封闭的序列化 XML 的字符编码为 UTF-8,封闭的字符串将被转义。那是对的吗?如果封闭的序列化字符串包含在 CDATA 部分中,我想这仍然有效,因为它是字符数据,对吧?
    • 并非如此。其他 XML 中的 XML 实际上并没有自己的编码,因为它只是外部 XML 中的 Unicode 文本(因此具有相同的编码)。在 out XMLs 编码中无法表示的任何字符都将由数字字符引用表示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多