我们使用需要 UTF-8 的 Web 服务。我们在客户端使用的框架是 Apache Axis2。我们调用 Web 服务,soap 正文包含 UTF-8 字符串。问题是身体似乎是“双重编码的”。即我们有字符'å'。utf-8 中“å”的 utf-8 表示是 C3 A5,但是我们在日志中看到发送的(双)编码值是 C3 83 C2 A5。
有没有人遇到过类似的问题?
我们使用需要 UTF-8 的 Web 服务。我们在客户端使用的框架是 Apache Axis2。我们调用 Web 服务,soap 正文包含 UTF-8 字符串。问题是身体似乎是“双重编码的”。即我们有字符'å'。utf-8 中“å”的 utf-8 表示是 C3 A5,但是我们在日志中看到发送的(双)编码值是 C3 83 C2 A5。
有没有人遇到过类似的问题?
您如何调用 Web 服务并不完全清楚。Web 服务中的方法是否只接受一个字符串?如果是这样,您的字符串在 Java 中是什么样的?Java 中的所有字符串都是 UTF-16 编码的 - 如果您通过获取每个字节并将其转换为字符来将 UTF-8 二进制表示转换为字符串,那么这就是问题所在。
如果你能展示你正在调用的方法是什么样的,以及你是如何调用它的,那将有很大帮助。
对于它的价值,我过去使用 Axis 和非 ASCII 字符串没有问题。我强烈怀疑这是您如何使用它而不是 Axis 本身的问题,尽管我愿意被证明是错误的 :)
编辑:根据您的评论,在您使用网络服务之前,您似乎在接收 HTML 表单数据时遇到了问题。如果用户在表单中输入了“å”,那么这就是您在 Eclipse 中调试时应该看到的内容。如果您将不良数据放入您的 Web 服务,难怪您会在另一端收到不良数据。我建议您运行WireShark以查看浏览器向您发送的确切内容,包括原始字节以及它指定的内容编码。我的猜测是您的网络服务器将其视为 ISO-8859-1,但它实际上是 UTF-8。
一旦您从表单中正确获取了字符串,我怀疑您会发现将它传递给 Web 服务完全没有问题。