mirror of
https://github.com/zxing/zxing.git
synced 2025-03-05 20:48:51 -08:00
Be more conservative about choosing Kanji mode. Since we don't support mixed mode, can only use it when the input is all double-byte Kanji.
git-svn-id: https://zxing.googlecode.com/svn/trunk@1107 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
parent
0debee9c71
commit
ac64595afa
|
@ -174,11 +174,12 @@ public final class Encoder {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Choose the best mode by examining the content. Note that 'encoding' is used as a hint;
|
* Choose the best mode by examining the content. Note that 'encoding' is used as a hint;
|
||||||
* if it is Shift_JIS then we assume the input is Kanji and return {@link Mode#KANJI}.
|
* if it is Shift_JIS, and the input is only double-byte Kanji, then we return {@link Mode#KANJI}.
|
||||||
*/
|
*/
|
||||||
public static Mode chooseMode(String content, String encoding) {
|
public static Mode chooseMode(String content, String encoding) {
|
||||||
if ("Shift_JIS".equals(encoding)) {
|
if ("Shift_JIS".equals(encoding)) {
|
||||||
return Mode.KANJI;
|
// Choose Kanji mode if all input are double-byte characters
|
||||||
|
return isOnlyDoubleByteKanji(content) ? Mode.KANJI : Mode.BYTE;
|
||||||
}
|
}
|
||||||
boolean hasNumeric = false;
|
boolean hasNumeric = false;
|
||||||
boolean hasAlphanumeric = false;
|
boolean hasAlphanumeric = false;
|
||||||
|
@ -200,6 +201,26 @@ public final class Encoder {
|
||||||
return Mode.BYTE;
|
return Mode.BYTE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean isOnlyDoubleByteKanji(String content) {
|
||||||
|
byte[] bytes;
|
||||||
|
try {
|
||||||
|
bytes = content.getBytes("Shift_JIS");
|
||||||
|
} catch (UnsupportedEncodingException uee) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int length = bytes.length;
|
||||||
|
if (length % 2 != 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < length; i += 2) {
|
||||||
|
int byte1 = bytes[i] & 0xFF;
|
||||||
|
if ((byte1 < 0x81 || byte1 > 0x9F) && (byte1 < 0xE0 || byte1 > 0xEB)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private static int chooseMaskPattern(BitVector bits, ErrorCorrectionLevel ecLevel, int version,
|
private static int chooseMaskPattern(BitVector bits, ErrorCorrectionLevel ecLevel, int version,
|
||||||
ByteMatrix matrix) throws WriterException {
|
ByteMatrix matrix) throws WriterException {
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue