Until today, when I got a mail from Jesse Crews:
Andreas Gohr, Fri Jun 29 15:56:47 CEST 2007:
I have a problem with the DataMatrix exncoder:
Underscores are not encoded correctly in the barcode at all times. If the underscore is the 4th or later character in the input, it will be encoded as a carret char (^).
Please, let me know if I can give any more information.
Do you remember this? I recently started using iec16022 and encountered this bug. In the remote event that you haven't lost interest nearly 7 years later, the encoding fault was caused by set 2 being incomplete. '_' is code 26, but '^' and FNC1 were both missing from the set, causing text (C40 and text) encodings to encode '_' as code 25 ('^') instead of the correct code 26.
iec16022ecc200.c, line 257 reads:
*s2 = ”!\”#$%&'()*+,-./:;⇔?@[\\]_”
but should be *s2 = ”!\”#$%&'()*+,-./:;⇔?@[\\]^_\232”
Awesome. Even though QRCode is more or less the defacto standard nowadays, my PHP semacode library finally works. Better 7 years late, than never .
The updated code is available in the Github Repository.