Кодировать расширенные символы ASCII в штрих-коде Code 128

Я хочу закодировать строку «QuiÑones» в штрих-коде Code 128. Можно ли включить расширенные символы ASCII в кодировку Code 128? .

Я провел некоторое исследование в Google, которое показало, что это возможно с помощью FNC4, но я не нашел, как именно это сделать. Было бы очень полезно, если бы кто-нибудь помог мне с решением на языке C.


person Mayuresh    schedule 31.01.2014    source источник
comment
Расширенный ASCII — это скорее концепция, чем точно определенная вещь. Пожалуйста, укажите точно вашу кодировку. Если вы просите библиотеку сделать это, то это не по теме.   -  person David Heffernan    schedule 31.01.2014
comment
Привет, Дэвид. Спасибо за комментарий, но я просто хочу знать, как мы можем использовать FNC4 для кодирования таких расширенных символов ASCII (специальные символы, такие как Ñ). Я не ищу библиотеку, у меня уже есть логика кодирования для кодирования символов до 128. ASCII-значение. вот ссылка на вики: en.wikipedia.org/wiki/Code_128   -  person Mayuresh    schedule 03.02.2014
comment
Ну, как я уже сказал, расширенный ASCII — это скорее концепция, чем точно определенная вещь. Вы не можете кодировать как расширенный ASCII. Вам нужно выбрать фактическую кодировку.   -  person David Heffernan    schedule 03.02.2014


Ответы (1)


Символы «расширенного ASCII» со значениями байтов от 128 до 255 действительно могут быть представлены в кодировке Code 128 с использованием специального функционального символа FNC4. Для общего использования (в открытых приложениях) необходимо, чтобы такие символы принадлежали набору символов ISO-8859-1 (Latin1).

Один символ FNC4 действует как переход к расширенному набору символов для следующего символа, тогда как два последовательных символа FNC4 действуют как защелка. Эффект заключается в переключении старшего бита (в основном для добавления или вычитания 128) 8-битного значения ASCII затронутых символов.

В вашем примере «QuiÑones» символ «Ñ» представлен значением байта 209 в наборе символов ISO-8859-1 по умолчанию, так что это 128 + 81. ASCII 81 преобразуется в "Q", поэтому вам требуется, чтобы последовательность FNC4 Q представляла "Ñ".

Эффективная кодировка Code 128 для этих данных выглядит следующим образом:

[104/START-B] [49/Q] [85/u] [73/i] [100/FNC4] [49/Q] [79/o] [78/n] [69/e] [83/s] [93/check-digit] [106/STOP]

Некоторые приложения и библиотеки штрих-кодов будут выполнять за вас расширенную кодировку символов на основе FNC4, как в примере ниже. Большинство этого не делают, но они должны позволять вам напрямую указывать символ FNC4, чтобы вы могли вручную управлять процессом, используя описанную выше технику, например: Qui{FNC4}Qones

Символ Code 128 выглядит так:

Код 128, содержащий слово Quiñones

person Terry Burton    schedule 18.05.2015
comment
Символы FNC4 аналогичны кодовым точкам области частного использования Unicode. Код 128 не говорит, что это за символы. Писатель и читатель должны были согласиться с их значением. Как правило, вы должны выбирать числовые значения для кодирования символов так же, как в четко определенной кодировке символов. Расширенный ASCII не имеет четкого определения; как и большинство кодовых страниц. Независимо от того, используете ли вы установленную кодировку символов или создаете ее, вы все равно можете сказать, что это такое. - person Tom Blodget; 19.05.2015
comment
По поводу использования FNC4, неправда. ISO/IEC 15417 §4.3.4.2 (d): FNC4 используется для представления расширенного набора символов (значения байтов от 128 до 255), как указано в ISO/IEC 8859-1... Если используется один символ FNC4, значение 128 добавляется к значению ISO/IEC 646 следующего символа данных в символе ... Последующие символы данных возвращаются к стандартному набору ISO/IEC 646. Если используются два последовательных символа FNC4, значение 128 добавляется к значению ISO/IEC 646 всех следующих символов данных до тех пор, пока не встретится еще два последовательных символа FNC4 или не будет достигнут конец символа. - person Terry Burton; 20.05.2015
comment
Что касается использования термина расширенный ASCII, спасибо. Я улучшил ответ, убрав случайные ссылки на расширенный ASCII, за исключением прямой ссылки на вопрос, и дал понять, что для открытых приложений требуется набор символов Latin1. Спасибо еще раз. - person Terry Burton; 20.05.2015