у меня вроде как получилось. пришлось просто форкнуть zxing и впихнуть насильно кодировку. но проблема может быть в декодировании, если определенный ридер не сможет прочитать, то придется опять как то думать.
Причем все онлайн декодеры по разному понимают. кому то нужна рамка, кто то сразу читает, кто то не поддерживает utf-8, а где то и вообще не может найти матрицу.
а код простой, вот например так
BitMatrix bitMatrix = null;
try {
DataMatrixWriter writer = new DataMatrixWriter();
Map hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
hints.put(EncodeHintType.DATA_MATRIX_SHAPE, SymbolShapeHint.FORCE_SQUARE);
bitMatrix = writer.encode("привет мир", BarcodeFormat.DATA_MATRIX, 0, 0, hints);
} catch (UnsupportedEncodingException e) {
//empty
}
Спасибо за ответ, это не помогает. если посмотреть то падает все раньше. на создании EncoderContext. так как внутри он пытается сделать byte[] msgBinary = msg.getBytes(Charset.forName("ISO-8859-1")); а дальше кидает exception.
даже коммент оставили перед этим "From this point on Strings are not Unicode anymore!" =)
Причем все онлайн декодеры по разному понимают. кому то нужна рамка, кто то сразу читает, кто то не поддерживает utf-8, а где то и вообще не может найти матрицу.
а код простой, вот например так
BitMatrix bitMatrix = null;
try {
DataMatrixWriter writer = new DataMatrixWriter();
Map hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
hints.put(EncodeHintType.DATA_MATRIX_SHAPE, SymbolShapeHint.FORCE_SQUARE);
bitMatrix = writer.encode("привет мир", BarcodeFormat.DATA_MATRIX, 0, 0, hints);
} catch (UnsupportedEncodingException e) {
//empty
}