mirror of
https://github.com/zxing/zxing.git
synced 2025-03-05 20:48:51 -08:00
QRCode Encoder: Support NUMERIC/ALPHANUMERIC Mode in Shift_JIS
This commit is contained in:
parent
9910fcfaa9
commit
585f77bf39
|
@ -181,9 +181,9 @@ public final class Encoder {
|
||||||
* if it is Shift_JIS, and the input is only double-byte Kanji, then we return {@link Mode#KANJI}.
|
* if it is Shift_JIS, and the input is only double-byte Kanji, then we return {@link Mode#KANJI}.
|
||||||
*/
|
*/
|
||||||
private static Mode chooseMode(String content, String encoding) {
|
private static Mode chooseMode(String content, String encoding) {
|
||||||
if ("Shift_JIS".equals(encoding)) {
|
if ("Shift_JIS".equals(encoding) && isOnlyDoubleByteKanji(content)) {
|
||||||
// Choose Kanji mode if all input are double-byte characters
|
// Choose Kanji mode if all input are double-byte characters
|
||||||
return isOnlyDoubleByteKanji(content) ? Mode.KANJI : Mode.BYTE;
|
return Mode.KANJI;
|
||||||
}
|
}
|
||||||
boolean hasNumeric = false;
|
boolean hasNumeric = false;
|
||||||
boolean hasAlphanumeric = false;
|
boolean hasAlphanumeric = false;
|
||||||
|
|
|
@ -164,6 +164,81 @@ public final class EncoderTestCase extends Assert {
|
||||||
assertEquals(expected, qrCode.toString());
|
assertEquals(expected, qrCode.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testEncodeKanjiMode() throws WriterException {
|
||||||
|
Map<EncodeHintType,Object> hints = new EnumMap<>(EncodeHintType.class);
|
||||||
|
hints.put(EncodeHintType.CHARACTER_SET, "Shift_JIS");
|
||||||
|
// Nihon in Kanji
|
||||||
|
QRCode qrCode = Encoder.encode("\u65e5\u672c", ErrorCorrectionLevel.M, hints);
|
||||||
|
String expected =
|
||||||
|
"<<\n" +
|
||||||
|
" mode: KANJI\n" +
|
||||||
|
" ecLevel: M\n" +
|
||||||
|
" version: 1\n" +
|
||||||
|
" maskPattern: 0\n" +
|
||||||
|
" matrix:\n" +
|
||||||
|
" 1 1 1 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 1 1 1\n" +
|
||||||
|
" 1 0 0 0 0 0 1 0 1 1 0 0 0 0 1 0 0 0 0 0 1\n" +
|
||||||
|
" 1 0 1 1 1 0 1 0 0 1 1 1 1 0 1 0 1 1 1 0 1\n" +
|
||||||
|
" 1 0 1 1 1 0 1 0 0 0 0 0 1 0 1 0 1 1 1 0 1\n" +
|
||||||
|
" 1 0 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 0 1\n" +
|
||||||
|
" 1 0 0 0 0 0 1 0 0 1 1 1 0 0 1 0 0 0 0 0 1\n" +
|
||||||
|
" 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
|
||||||
|
" 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0\n" +
|
||||||
|
" 1 0 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 0 1 0\n" +
|
||||||
|
" 1 1 0 1 0 0 0 1 0 1 1 1 0 1 0 1 0 1 0 0 0\n" +
|
||||||
|
" 0 1 0 0 0 0 1 1 1 1 1 1 0 1 1 1 0 1 0 1 0\n" +
|
||||||
|
" 1 1 1 0 0 1 0 1 0 0 0 1 1 1 0 1 1 0 1 0 0\n" +
|
||||||
|
" 0 1 1 0 0 1 1 0 1 1 0 1 0 1 1 1 0 1 0 0 1\n" +
|
||||||
|
" 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 1 0 1\n" +
|
||||||
|
" 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 0 1 0 0 1 1\n" +
|
||||||
|
" 1 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1\n" +
|
||||||
|
" 1 0 1 1 1 0 1 0 1 0 0 0 1 0 1 0 1 0 1 0 1\n" +
|
||||||
|
" 1 0 1 1 1 0 1 0 0 0 0 1 0 1 0 1 0 1 0 1 0\n" +
|
||||||
|
" 1 0 1 1 1 0 1 0 1 0 1 1 0 1 1 1 0 0 1 0 1\n" +
|
||||||
|
" 1 0 0 0 0 0 1 0 0 0 0 1 1 1 0 1 1 1 0 1 0\n" +
|
||||||
|
" 1 1 1 1 1 1 1 0 1 1 0 1 0 1 1 1 0 0 1 0 0\n" +
|
||||||
|
">>\n";
|
||||||
|
assertEquals(expected, qrCode.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testEncodeShiftjisNumeric() throws WriterException {
|
||||||
|
Map<EncodeHintType,Object> hints = new EnumMap<>(EncodeHintType.class);
|
||||||
|
hints.put(EncodeHintType.CHARACTER_SET, "Shift_JIS");
|
||||||
|
QRCode qrCode = Encoder.encode("0123", ErrorCorrectionLevel.M, hints);
|
||||||
|
String expected =
|
||||||
|
"<<\n" +
|
||||||
|
" mode: NUMERIC\n" +
|
||||||
|
" ecLevel: M\n" +
|
||||||
|
" version: 1\n" +
|
||||||
|
" maskPattern: 2\n" +
|
||||||
|
" matrix:\n" +
|
||||||
|
" 1 1 1 1 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1 1 1\n" +
|
||||||
|
" 1 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 0 0 0 0 1\n" +
|
||||||
|
" 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 0 1 1 1 0 1\n" +
|
||||||
|
" 1 0 1 1 1 0 1 0 1 0 1 1 1 0 1 0 1 1 1 0 1\n" +
|
||||||
|
" 1 0 1 1 1 0 1 0 1 1 0 1 1 0 1 0 1 1 1 0 1\n" +
|
||||||
|
" 1 0 0 0 0 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0 1\n" +
|
||||||
|
" 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
|
||||||
|
" 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0\n" +
|
||||||
|
" 1 0 1 1 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1 0 0\n" +
|
||||||
|
" 1 1 0 0 0 1 0 0 1 0 1 0 1 0 0 1 0 0 1 0 0\n" +
|
||||||
|
" 0 1 1 0 1 1 1 1 0 1 1 1 0 1 0 0 1 1 0 1 1\n" +
|
||||||
|
" 1 0 1 1 0 1 0 1 0 0 1 0 0 0 0 1 1 0 1 0 0\n" +
|
||||||
|
" 0 0 1 0 0 1 1 1 0 0 0 1 0 1 0 0 1 0 1 0 0\n" +
|
||||||
|
" 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0 0 1 0 0 0\n" +
|
||||||
|
" 1 1 1 1 1 1 1 0 0 0 1 0 1 0 1 1 0 0 0 0 0\n" +
|
||||||
|
" 1 0 0 0 0 0 1 0 1 1 0 1 1 1 1 0 0 1 0 1 0\n" +
|
||||||
|
" 1 0 1 1 1 0 1 0 1 0 1 0 1 0 0 1 0 0 1 0 0\n" +
|
||||||
|
" 1 0 1 1 1 0 1 0 1 1 1 0 1 0 0 1 0 0 1 0 0\n" +
|
||||||
|
" 1 0 1 1 1 0 1 0 1 1 0 1 0 1 0 0 1 1 1 0 0\n" +
|
||||||
|
" 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 0 1 1 0\n" +
|
||||||
|
" 1 1 1 1 1 1 1 0 1 1 0 1 0 1 0 0 1 1 1 0 0\n" +
|
||||||
|
">>\n";
|
||||||
|
assertEquals(expected, qrCode.toString());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testAppendModeInfo() {
|
public void testAppendModeInfo() {
|
||||||
BitArray bits = new BitArray();
|
BitArray bits = new BitArray();
|
||||||
|
|
Loading…
Reference in a new issue