|
Знатокам штрихкодов : Кодирования русских букв в Code-128 | ☑ | ||
---|---|---|---|---|
0
bvb
11.12.15
✎
12:46
|
Первый вопрос можно ли в нем вообще кодировать русский алфавит
я закодировал номер документа 361д-15 у меня получилось (20)361l-15(15)(10)(10)(10) Можно ли его нормально закодировать и если как до где копать ? |
|||
1
Михаил Козлов
11.12.15
✎
12:48
|
Не проще использовать УИД?
|
|||
2
bvb
11.12.15
✎
13:14
|
(1) Клиент требует палетную этикетку с номером накладной в Code-128
|
|||
3
vde69
11.12.15
✎
13:17
|
Глобальный контекст (Global context)
Base64Строка (Base64String) Синтаксис: Base64Строка(<Значение>) Параметры: <Значение> (обязательный) Тип: ДвоичныеДанные. Двоичные данные, которые необходимо закодировать по алгоритму base64. Возвращаемое значение: Тип: Строка. Описание: Получает строку, закодированную по алгоритму base64. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). См. также: Глобальный контекст, метод Base64Значение -------------------------------------------------------------------------------- Методическая информация |
|||
4
Лефмихалыч
11.12.15
✎
13:17
|
code 128 русских буков не знает. Исзобретай какие-то велосипеды
|
|||
5
Garykom
гуру
11.12.15
✎
13:24
|
(4) да и простейший это (3)
|
|||
6
Garykom
гуру
11.12.15
✎
13:25
|
||||
7
Лефмихалыч
11.12.15
✎
13:26
|
(5) строку с номером в файл, потом из этого файла двоичные данные, потом из них базе64строка? это простейший штоле? о_0
|
|||
8
Garykom
гуру
11.12.15
✎
13:26
|
(7) какие в жпо двоичные данные? может иногда лучше промолчать если не в курсе да?
|
|||
9
Garykom
гуру
11.12.15
✎
13:27
|
||||
10
Лефмихалыч
11.12.15
✎
13:28
|
(8) Base64Строка() на вход двоичные данные требует. Автору надо в ШК поместить номер документа. Как из номера документа получить Base64Строка()?
|
|||
11
Лефмихалыч
11.12.15
✎
13:31
|
(0) может просто напросто:
КодироватьСтроку("361д-15", СпособКодированияСтроки.КодировкаURL) м? |
|||
12
Garykom
гуру
11.12.15
✎
13:33
|
Функция КодироватьBase64(Текст) // (с) Decker
Перем Алфавит; Перем Группа, Символ; Перем Значение, Разряд; Перем Символ6, Значение6; Перем Значение8, Символ8; Перем Текст64; // Подготовка алфавита и результата Алфавит = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; Текст64 = ""; Группа = ""; Для Номер=1 По СтрДлина(Текст) Цикл Символ = Сред(Текст, Номер, 1); Группа = Группа + Символ; Если ((СтрДлина(Группа) = 3) или (Номер = СтрДлина(Текст))) Тогда // Получение числового значения из 3-х символов Значение = 0; Разряд = 2; Пока Разряд >= 0 Цикл Символ8 = Сред(Группа, 3 - Разряд, 1); Значение8 = КодСимв(Символ8); Если Разряд = 1 Тогда Значение8 = Значение8 * 256; ИначеЕсли Разряд = 2 Тогда Значение8 = Значение8 * 256 * 256; КонецЕсли; Значение = Значение + Значение8; Разряд = Разряд - 1; КонецЦикла; // Получение 4-х символов из числового значения Разряд = 3; Пока Разряд >= 0 Цикл Значение6 = Значение; Если Разряд = 3 Тогда Значение6 = Цел(Значение6 / 64 / 64 / 64); Значение = Значение - Значение6 * 64 * 64 * 64; ИначеЕсли Разряд = 2 Тогда Значение6 = Цел(Значение6 / 64 / 64); Значение = Значение - Значение6 * 64 * 64; ИначеЕсли Разряд = 1 Тогда Значение6 = Цел(Значение6 / 64); Значение = Значение - Значение6 * 64; КонецЕсли; Если СтрДлина(Группа) < 3 Тогда Если Значение6 = 0 Тогда Значение6 = 64; КонецЕсли; КонецЕсли; Символ6 = Сред(Алфавит, Значение6+1,1); Текст64 = Текст64 + Символ6; Разряд = Разряд - 1; КонецЦикла; Группа = ""; КонецЕсли; КонецЦикла; Возврат Текст64; КонецФункции // КодироватьBase64() http://dml.compkaluga.ru/forum/index.php?showtopic=73815 |
|||
13
Лефмихалыч
11.12.15
✎
13:36
|
(12) да куда уж проще-то...
|
|||
14
bvb
11.12.15
✎
13:47
|
КодироватьBase64(365l-15) ==> MzYxC0xNSAgIB//
|
|||
15
Лефмихалыч
11.12.15
✎
13:57
|
(14) осталось найти еще 60 строк, которые раскодируют это обратно
|
|||
16
Garykom
гуру
11.12.15
✎
13:57
|
(14) все правильно только латинские буквы остались и спецсимволы все что подходит для Code 128b https://en.wikipedia.org/wiki/Code_128
|
|||
17
Garykom
гуру
11.12.15
✎
13:57
|
(15) там (12) внизу ссылка вообще то...
|
|||
18
Лефмихалыч
11.12.15
✎
14:01
|
Сообщить(КодироватьСтроку("361д-15", СпособКодированияСтроки.КодировкаURL));
Сообщить(РаскодироватьСтроку("361%D0%B4-15", СпособКодированияСтроки.КодировкаURL)); 361%D0%B4-15 361д-15 мне кажется - так проще. Две строки, штатно, и без ссылок в какой-то хрен знает куда |
|||
19
Garykom
гуру
11.12.15
✎
14:02
|
(18) можно и так, а можно и вообще транслитом воспользоваться
|
|||
20
Лефмихалыч
11.12.15
✎
14:03
|
(19) для транслита тоже надо две функции по полста строк руками писать
|
|||
21
Garykom
гуру
11.12.15
✎
14:05
|
(20) там по 5 строк всего через цикл и стрзаменить
|
|||
22
Локи-13
11.12.15
✎
14:06
|
(18) Голосую за этот вариант
|
|||
23
Лефмихалыч
11.12.15
✎
14:07
|
(21) ну, во-первых, для обеспечения преобразования туда-сюда без потерь всяких Ж, Ш, З и т.д. надо больше 5 строк и СтрЗаменить. Во-вторых - какая разница, сколько писать, если условия таковы, что все написано за нас?
|
|||
24
Garykom
гуру
11.12.15
✎
14:08
|
(23) где нибудь указание на версию платформы 1С увидел?
|
|||
25
bvb
11.12.15
✎
15:26
|
(24) Платформа 8.2
ДекодироватьBase64(КодироватьBase64(361д-15)) Вывел в штрихкод Сканер считал что то типа : 361LMH Короче тема пустая ибо сканер русские символы не распознает в CODE-128 Поэтому похоже (4) :( |
|||
26
Лефмихалыч
11.12.15
✎
15:29
|
(25) зачем выводи в штрихкод КодироватьBase64(361д-15)
ДЕкодировать тебе понадобится, при обработке данных от сканера |
|||
27
bvb
11.12.15
✎
15:36
|
Дык декодировать буду не я а клиент
|
|||
28
Лефмихалыч
11.12.15
✎
15:38
|
(27) и что клиент будет делать с номером твоего документа? Ты этот номер ему в каких-то электрических выгрузках передаешь что ли?
|
|||
29
Лефмихалыч
11.12.15
✎
15:39
|
или это номер тебе клиент дает?
|
|||
30
Serginio1
11.12.15
✎
15:45
|
||||
31
Garykom
гуру
11.12.15
✎
15:47
|
(25) предлагаю отказаться от кириллицы в номерах документов
|
|||
32
Garykom
гуру
11.12.15
✎
15:47
|
(31)+ ну или запилить свой стандарт вместо всех https://ru.wikipedia.org/wiki/Сравнение_характеристик_штрихкодов
|
|||
33
NorthWind
11.12.15
✎
15:53
|
Я бы не заморачивался с base64, а сделал бы свою таблицу соответствия русских букв и латинских, что-то типа транслита. И ей бы кодировал. Это будет экономичнее, потому что base64 очень громоздкий
|
|||
34
Злопчинский
11.12.15
✎
16:01
|
(33) осталось понять - если в сиходном сообщении есть родные латинские буквы - при раскодировке - что делать..?
|
|||
35
Garykom
гуру
11.12.15
✎
16:12
|
(34) стандартно "а">"a", "a">"\a", "\">"\\"
|
|||
36
Garykom
гуру
11.12.15
✎
16:14
|
(35)+ из "ТестTest" будет "Test\T\e\s\t"
|
|||
37
Лефмихалыч
11.12.15
✎
16:18
|
все заметили, да, что автору штрихкод нужен, чтобы передавать этот штрих-код контрагенту? Или у меня глюки?
|
|||
38
NorthWind
11.12.15
✎
16:46
|
(36) Ну да. Или же, наоборот, использовать двухсимвольные последовательности для латиницы, если вероятность ее появления в сообщении ниже, чем кириллицы. А может, у автора вообще исключена латиница. Мы ж не знаем.
|
|||
39
NorthWind
11.12.15
✎
16:50
|
(37) заметил, но дело в том что там ничего не написано по поводу стандартов. Если клиенту нужен SSCC, то я не знаю, при каком там кириллица
|
|||
40
NorthWind
11.12.15
✎
16:51
|
да и SSCC это EAN (или GS1) - 128, а не CODE128
|
|||
41
zippygrill
11.12.15
✎
17:02
|
Функция КонвертацияИзКириллицы(Знач ИсходнаяСтрока)
СтрокаЛатиницы = "abcdefghijklmnopqrstuvwxyz""#$&',./:;<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^`{|}~"; СтрокаКириллицы = "фисвуапршолдьтщзйкыегмцчняЭ№;?эбю.ЖжБЮ,""ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯх\ъ:ёХ/ЪЁ"; ДлинаИсходнойСтроки = СтрДлина(ИсходнаяСтрока); РезультирующаяСтрока = ""; Для ТекущаяПозиция = 1 По ДлинаИсходнойСтроки Цикл ТекущийСимвол = Сред(ИсходнаяСтрока,ТекущаяПозиция,1); Позиция = Найти(СтрокаКириллицы, ТекущийСимвол); Если Позиция = 0 Тогда РезультирующаяСтрока = РезультирующаяСтрока + ТекущийСимвол; Иначе РезультирующаяСтрока = РезультирующаяСтрока + Сред(СтрокаЛатиницы,Позиция,1); КонецЕсли; КонецЦикла; Возврат РезультирующаяСтрока; КонецФункции // КонвертацияИзКириллицы() |
|||
42
IlyaSR
11.12.15
✎
17:12
|
Что мешает в Штрихкод сформировать на основе УИД, а под ним вывести номер документа строкой )))
|
|||
43
Garykom
гуру
11.12.15
✎
17:20
|
(41) зачем столько кода?
Функция Транслит(СтрокаВходящая) Результат = СтрокаВходящая; СтрокаЛатиницы = "abcdefghijklmnopqrstuvwxyz""#$&',./:;<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^`{|}~"; СтрокаКириллицы = "фисвуапршолдьтщзйкыегмцчняЭ№;?эбю.ЖжБЮ,""ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯх\ъ:ёХ/ЪЁ"; Для НомерСимвола = 1 По СтрДлина(СтрокаКириллицы) Цикл Результат = СтрЗаменить(Результат,Сред(СтрокаКириллицы, НомерСимвола, 1), Сред(СтрокаЛатиницы, НомерСимвола, 1)); КонецЦикла; Возврат Результат; КонецФункции ЗЫ строки поправить замен как нуна, переделка для замен "Ш">"SH" тоже не проблема |
|||
44
etc
11.12.15
✎
17:20
|
(0) поинтересуйся у клиента для которого стараешся, пусть приведет пример штрих-кода с кириллицей который они успешно считывают. А то сдается мне если не через URL кодирование то еще и кодовую страницу будете согласовывать, UTF, или вообще KOI-8 :)
|
|||
45
etc
11.12.15
✎
17:22
|
(43) если бы не разное количество букв в алфавитах ...
|
|||
46
Mikeware
11.12.15
✎
17:23
|
(43) транслит убивает однозначность. Для того, чтобы впихнуть аски в пол-аски, достаточно поднять систему всего вдвое.
хотя можно тупо применить префикс - расширив вдвое код. |
|||
47
Garykom
гуру
11.12.15
✎
18:01
|
(45) не вижу проблем использовать " " в кодовых строках и по 2 символа " ш ч"="shch"
|
|||
48
lEvGl
гуру
11.12.15
✎
18:14
|
в (30) привели нормальный вариант, изобретать велосипед не нужно, уже есть - ASCII (любая другая кодировка), клиенту сказать, что закодировано по международному стандарту, пусть расшифровку делает в обратном порядке, будет возмущаться - на педивикию отправить и сказать, что он не в тренде и не пользуется общепринятыми Мировыми стандартами
пс. а придумывать свою таблицу кодировки - себе дороже, потом придется объяснять расшифровщику что да как, интересно что он еще подумает |
|||
49
lEvGl
гуру
11.12.15
✎
18:35
|
я может чего не понял... в 1с юникод
Для Н = 1 По СтрДлина(Строка) Цикл Результат = Результат + КодСимвола(Сред(Строка, Н, 1)) + ";"; КонецЦикла; при разборе Массив = РазложитьСтрокуВМассив....(СтрокаИзСканера, ";"); Для каждого Строка Из Массив Цикл Результат = Результат + Символ(Строка); КонецЦикла; если разбор не в 1с, то инструментами среды Encoding там или еще чего |
|||
50
lEvGl
гуру
11.12.15
✎
18:36
|
в чем дело то, полсотни постов ;)
|
|||
51
etc
11.12.15
✎
18:44
|
(48) ASCII по большому счету стандарт только на первые 128 символов. Есть несколько вариаций размещения в верхних 128-256 кодах ASCII национальных символов что и обозначается кодировкой. Например KOI8R, CP866 и т.д.
|
|||
52
etc
11.12.15
✎
18:45
|
(51)+ поэтому я и говорю что в таком варианте ему еще и кодировку с клиентом придется согласовывать.
|
|||
53
lEvGl
гуру
11.12.15
✎
19:03
|
(51) интересно как будет выглядеть 361д-15 в казахском варианте, тогда надо и номенклатуру кодировать и все остальные тексты, что бы клиент, родной, не чувствовал себя ущемленным
|
|||
54
etc
11.12.15
✎
19:27
|
(53) мне кажется его клиенту для которого он старается еще не попадались документы с кириллицей в номере.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |