Как создать DataMatrix с utf-8 (кириллицей) в Java?
Доброе время суток. Столкнулся с проблемой: не получается создать DataMatrix c кириллицей-контентом. Посоветуйте open-source библиотеку и, если есть, примерчик простой
Пробовал библиотеки:
1. zxing. по умолчанию использует кодировку ISO 8859-1. не понял как можно задать другую. hints.put(EncodeHintType.CHARACTER_SET, "UTF-8") не помогает, так как не доходит до читения хинтов. и я так понял у них не реализована поддержка eci сегомента.
2.barcode4j. та же история что и с zxing
3. okapibarcode с кирилицей генерит что то не понятное. ни один онлайн декодер не распознал.
есть и платные библиотеки, подключил aspose-barcode и там все хорошо, но из-за того и не подходит что платные
Спасибо за ответ, это не помогает. если посмотреть то падает все раньше. на создании EncoderContext. так как внутри он пытается сделать byte[] msgBinary = msg.getBytes(Charset.forName("ISO-8859-1")); а дальше кидает exception.
даже коммент оставили перед этим "From this point on Strings are not Unicode anymore!" =)
DataMatrix кажется вообще не умеет UTF-8 (возможно сильно ошибаюсь в этом но в стандарте говорилось о ISO-8859-1). Можно попробовать костылями сделать, но тогда читаться оно будет опять же только в вашем софте, другие читалки будут непонятно что выдавать.
Хм. Почитал ваш ответ выше. Прилепите часть кода где вы кодировку пытаетесь сменить.
у меня вроде как получилось. пришлось просто форкнуть 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
}