The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"FNC1 в perl"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (Perl)
Изначальное сообщение [ Отслеживать ]

"FNC1 в perl"  +/
Сообщение от Андрейemail (??), 05-Фев-26, 17:20 
Доброго времени суток!

Господа, возникла необходимость с помощью  модуля HTML::Barcode::DataMatrix создать "Честный знак" и вывести его на web-страницу. Управляющий символ GS легко вставляется посредством chr (29). А вот FNC1 никак не хочет. У него ASCII 232 и chr(232) не проходит.

use HTML::Barcode::DataMatrix;

my $dt = '0102900806230026215TIWUQTEMgnps91EE1092RqSDLGNvKnc4/0rc3+/ddq4XCNVpDMqmew/WcgmOKkE=';
my $barcode = HTML::Barcode::DataMatrix->new(text => chr(232) . substr($dt, 0, 31) . chr (29) . substr($dt, 31, 6) . chr (29) . substr($dt, 37), encoding_mode => 'C40', module_size => "2px");
print $barcode->render;


Кто-нибудь сталкивался с такой проблемой и поможет "засунуть" правильно FNC1?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по ответам | RSS]

1. Сообщение от ACCA (ok), 07-Фев-26, 01:42   +/

use Barcode::Code128 qw(FNC1); # Import the FNC1 constant
my $code = new Barcode::Code128;
# Prepend FNC1 to the data
$code->text(FNC1 . '00000123455555555558');

Не?

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #2

2. Сообщение от Андрейemail (??), 07-Фев-26, 13:35   +/
>
 
> use Barcode::Code128 qw(FNC1); # Import the FNC1 constant
> my $code = new Barcode::Code128;
> # Prepend FNC1 to the data
> $code->text(FNC1 . '00000123455555555558');
>

> Не?

Не. Все то же самое. Он почему то, что выше 127 по ASCII как-то не хочет кодировать.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #3

3. Сообщение от Pahanivo (ok), 09-Фев-26, 16:53   +/

> Не. Все то же самое. Он почему то, что выше 127 по
> ASCII как-то не хочет кодировать.

Может потому штааа в мане написано:

Note that characters from 128 to 255 (inclusive) are by default internally not encoded as UTF-8 for backward compatibility reasons.

И надо принудительно указать utf? )

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #4, #8

4. Сообщение от Андрейemail (??), 09-Фев-26, 17:07   +/
>> Не. Все то же самое. Он почему то, что выше 127 по
>> ASCII как-то не хочет кодировать.
> Может потому штааа в мане написано:
> Note that characters from 128 to 255 (inclusive) are by default internally
> not encoded as UTF-8 for backward compatibility reasons.
> И надо принудительно указать utf? )

Включаю use utf8;

Не помогает, может неправильно делаю?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3 Ответы: #5

5. Сообщение от Pahanivo (ok), 09-Фев-26, 17:42   +/
>>> Не. Все то же самое. Он почему то, что выше 127 по
>>> ASCII как-то не хочет кодировать.
>> Может потому штааа в мане написано:
>> Note that characters from 128 to 255 (inclusive) are by default internally
>> not encoded as UTF-8 for backward compatibility reasons.
>> И надо принудительно указать utf? )
> Включаю use utf8;
> Не помогает, может неправильно делаю?

Покури в сторону encode

А  вообще:

encoding_mode
The encoding mode for the data matrix. Can be one of: AUTO (default), ASCII, C40, TEXT, BASE256, or NONE.

модуль то умеет в utf???

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #4 Ответы: #10

6. Сообщение от fred (??), 06-Мрт-26, 16:01   +/
use open ':locale' | use open ':encoding(UTF-8)';

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #7

7. Сообщение от Андрейemail (??), 28-Мрт-26, 15:48   +/
> use open ':locale' | use open ':encoding(UTF-8)';

"use" not allowed in expression at ./dt.cgi line 7, near "| "
syntax error at ./dt.cgi line 7, near "| use open "


Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6 Ответы: #9

8. Сообщение от Аноним (8), 31-Мрт-26, 00:41   +/
>> Не. Все то же самое. Он почему то, что выше 127 по
>> ASCII как-то не хочет кодировать.
> Может потому штааа в мане написано:
> Note that characters from 128 to 255 (inclusive) are by default internally
> not encoded as UTF-8 for backward compatibility reasons.
> И надо принудительно указать utf? )

use bytes попробуй

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3

9. Сообщение от Pahanivo (ok), 31-Мрт-26, 09:37   +/
>> use open ':locale' | use open ':encoding(UTF-8)';
> "use" not allowed in expression at ./dt.cgi line 7, near "| "
> syntax error at ./dt.cgi line 7, near "| use open "

| -> ;
?
А ты точно продю... программер?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #7

10. Сообщение от Андрейemail (??), 31-Мрт-26, 10:14   +/
> encoding_mode
> The encoding mode for the data matrix. Can be one of: AUTO
> (default), ASCII, C40, TEXT, BASE256, or NONE.

Пришлось по глубже взгялуть в это дело. На питоне все из "коробки" работает нормально, но он почему оочень медленный в этом плане, да и лепить костыль для вызова скрипта рисования Честного знака из питона не хотелось (да и в моем случае SVG лучше, чем PNG).

Тут дело в другом.

Вся эта кодировка тут до лампочки. Если посмотреть исходный код, то увидим, что режимы ASCII, C40, TEXT, BASE256 проходит через такую вещь, как scalar ... Единственный режим, который нормально пропускает, это NONE. Но тут возникает другая проблема. ASCII коды меньше, чем 127, модуль почему-то уменьшает на единицу и чтобы правильно все отображалась, к этим кодам нужно добавить 1. В результате будет что-то типа такого:

use CGI;
use HTML::Barcode::DataMatrix;

my $q = CGI->new;
print $q->header(-type => 'text/html', -charset => 'utf8');

# Честный знак
my $dt = '0102900806230022215TIWUQTEMgnps91EE1092RqSDLGNvKnc4/0rc3+/ddq4XCNVpDMqmew/WcgmOKkE=';
my @array = unpack( "C*", $dt );
$dt='';
$dt .= chr(++$array[$_]) for (0..$#array);

# FNC1 - chr(232), GS должен быть chr(29), но здесь ставим chr(30)
my $barcode = HTML::Barcode::DataMatrix->new(text =>  chr(232) . substr($dt, 0, 31) . chr (30) . substr($dt, 31, 6) . chr (30) . substr($dt, 37), encoding_mode => 'NONE', module_size => "2px");

print $barcode->render;

Берем любую программу, например, Честный знак.Бизнес, проверяем и все путем.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #5


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2026 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру