From 0cf3b9be71680f50c90a71ca26ce0d33664b0dd6 Mon Sep 17 00:00:00 2001 From: "MakKi (makki_d)" Date: Thu, 21 Jun 2018 02:52:44 +0900 Subject: [PATCH] Fix QR-code hanzi segment decoder (#1033) * Fix QR-code hanzi segment decoder * remove unicode character --- .../qrcode/decoder/DecodedBitStreamParser.java | 2 +- .../decoder/DecodedBitStreamParserTestCase.java | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/google/zxing/qrcode/decoder/DecodedBitStreamParser.java b/core/src/main/java/com/google/zxing/qrcode/decoder/DecodedBitStreamParser.java index cf3db15c9..0bfaf231c 100644 --- a/core/src/main/java/com/google/zxing/qrcode/decoder/DecodedBitStreamParser.java +++ b/core/src/main/java/com/google/zxing/qrcode/decoder/DecodedBitStreamParser.java @@ -160,7 +160,7 @@ final class DecodedBitStreamParser { // Each 13 bits encodes a 2-byte character int twoBytes = bits.readBits(13); int assembledTwoBytes = ((twoBytes / 0x060) << 8) | (twoBytes % 0x060); - if (assembledTwoBytes < 0x003BF) { + if (assembledTwoBytes < 0x00A00) { // In the 0xA1A1 to 0xAAFE range assembledTwoBytes += 0x0A1A1; } else { diff --git a/core/src/test/java/com/google/zxing/qrcode/decoder/DecodedBitStreamParserTestCase.java b/core/src/test/java/com/google/zxing/qrcode/decoder/DecodedBitStreamParserTestCase.java index 220b2b777..cba20b10f 100644 --- a/core/src/test/java/com/google/zxing/qrcode/decoder/DecodedBitStreamParserTestCase.java +++ b/core/src/test/java/com/google/zxing/qrcode/decoder/DecodedBitStreamParserTestCase.java @@ -81,6 +81,19 @@ public final class DecodedBitStreamParserTestCase extends Assert { assertEquals("\u963f", result); } + @Test + public void testHanziLevel1() throws Exception { + BitSourceBuilder builder = new BitSourceBuilder(); + builder.write(0x0D, 4); // Hanzi mode + builder.write(0x01, 4); // Subset 1 = GB2312 encoding + builder.write(0x01, 8); // 1 characters + // A5A2 (U+30A2) => A5A2 - A1A1 = 401, 4*60 + 01 = 0181 + builder.write(0x0181, 13); + String result = DecodedBitStreamParser.decode(builder.toByteArray(), + Version.getVersionForNumber(1), null, null).getText(); + assertEquals("\u30a2", result); + } + // TODO definitely need more tests here }