0

我们刚刚遇到了一个有趣的问题,我们在对消息转换的响应流进行单元测试时遇到了这个问题。此流程的结果是(XML 到 NON XML)二进制输出,它被放入队列。我们面临的问题是:此二进制输出消息的长度与非 xml 数据的长度不匹配,我们将其保存为 MFL 格式测试工具的预期结果。我们的推断是 OSB 在内部对此消息应用了一些编码,从外观上看,它是代理/业务服务中存在的 UTF-8。于是我们把expected的编码改成了UTF-8,测试用例成功了。但仔细调查后发现,UTF-8 本身并不能正确表示所有数据。哪里有数据丢失,它用'?' 象征。

而且中间还有MQ,可能有自己的编码,我们目前无法排除。

我们可以想到两种解决方案: 1. 我们可以通过将期望和获得的都转换为 Byte[] 来实现比较,以避免任何编码问题。但是我们无法在输出中获得确切的消息长度。2、我们可以将期望结果和得到的结果都编码成UTF-8以外的通用编码格式,但不确定是哪种,然后进行比较。

有什么想法吗?

4

1 回答 1

0

当您查看 UTF-8 编码的二进制数据并看到问号 (?) 时,您可能不会遇到数据丢失。如果您的计算机上安装了不完整的字体集,并且没有字符可以显示文件中指定的特定 unicode 字符,则几率要好得多。您的二进制到 UTF-8 转换例程使用缺少字形的字符的可能性较小。

如果二进制文件不匹配,您应该已经解决了那里的问题。奇怪的是,其中一个二进制文件编码了字符串序列的结尾、文件序列的结尾、传输序列的结尾或某些位集,这使程序误以为当实际存在更多数据时它已完成)。

要么,要么您错误地将二进制文件转换为字符串序列。二进制比较应该在字节级别进行,在 Java 中你不能假设字节 == 字符。

于 2010-12-08T15:29:27.767 回答