Android和IOS上zxing解码的不同行为

时间:2012-07-11 22:46:18

标签: android iphone decode qr-code zxing

我已经在Android上完成了对QR码的编码,解码部分也运行良好。而且为了好玩,我将中文单词编码为QR码,Android上的zxing可以很好地识别它。但是,我尝试了zxing iPhone应用程序,它无法解码中文(很长一段时间没有结果,而Android代码只需要1秒钟就可以返回识别的文本)。我还没看过IOS的zxing sdk,只是好奇为什么来自同一家公司的应用程序在这两个平台上表现不同,我认为算法应该是相同的。谢谢!

2 个答案:

答案 0 :(得分:4)

因为你不是中国人,但是你发现了这个问题。你必须是一个好的测试者。如您所知,zxing decode与iOS和Android不同。可以说zixng iOS是zxing Android的子集(我想)。如果你想在zxing iOS中支持中文,你必须改进c ++端口中的StringUtils.cpp。添加这些代码可能会对您有所帮助。

if (length > 2) {
    for (int i = 0; i < length - 1; i++) {
        int value = bytes[i] & 0xFF;
        if (value > 0x7F) {
            if (value > 0xB0 && value <= 0xF7) {
                int value2 = bytes[i + 1] & 0xFF;
                if (value2 > 0xA0 && value2 <= 0xF7)
                    return GB2312;
            }
        }
    }
}

答案 1 :(得分:1)

ZXing不是一家公司,它是一个开源项目。

更重要的是,在这种情况下,在Java(Android)和C ++(iOS)端口上工作的人员重叠但不相同。并且如ZXing FAQ中所述,端口不等同。

然而,Java和C ++中的QR代码非常谨慎地保持同步,因此结果应该没有太大差别。您最好的选择是将导致问题的代码发布到ZXing邮件列表,以便人们有机会进行调查。

(FWIW,我是C ++ / iOS ZXing端口最常见的贡献者之一。)