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