Фпагменты из моей обработки:
Марка = СокрЛП(КодМарки);
ПозЖС = Найти(Марка, Симв(29));
Если ПозЖС = 0 Тогда
МаркБКХ = Лев(Марка, 21);
Иначе
МаркБКХ = Лев(Марка, ПозЖС - 1);
КонецЕсли;
Киз = ЗаменитьСимволы(МаркБКХ);
А это функция в глобальном модуле:
// Перекодирует строку маркировки под требования ЦРПТ
Функция ЗаменитьСимволы(Знач ИсхСтр) Экспорт
ВыхСтр = СтрЗаменить(ИсхСтр,"%", "%25");
ВыхСтр = СтрЗаменить(ВыхСтр,"""","%22");
ВыхСтр = СтрЗаменить(ВыхСтр,"-", "%2D");
ВыхСтр = СтрЗаменить(ВыхСтр,".", "%2E");
ВыхСтр = СтрЗаменить(ВыхСтр,"<", "%3C");
ВыхСтр = СтрЗаменить(ВыхСтр,">", "%3E");
ВыхСтр = СтрЗаменить(ВыхСтр,"", "%5C");
ВыхСтр = СтрЗаменить(ВыхСтр,"^", "%5E");
ВыхСтр = СтрЗаменить(ВыхСтр,"_", "%5F");
ВыхСтр = СтрЗаменить(ВыхСтр,"`", "%60");
ВыхСтр = СтрЗаменить(ВыхСтр,"{", "%7B");
ВыхСтр = СтрЗаменить(ВыхСтр,"|", "%7C");
ВыхСтр = СтрЗаменить(ВыхСтр,"}", "%7D");
ВыхСтр = СтрЗаменить(ВыхСтр,"~", "%7E");
ВыхСтр = СтрЗаменить(ВыхСтр,"!", "%21");
ВыхСтр = СтрЗаменить(ВыхСтр,"#", "%23");
ВыхСтр = СтрЗаменить(ВыхСтр,"$", "%24");
ВыхСтр = СтрЗаменить(ВыхСтр,"&", "%26");
ВыхСтр = СтрЗаменить(ВыхСтр,"'", "%27");
ВыхСтр = СтрЗаменить(ВыхСтр,"(", "%28");
ВыхСтр = СтрЗаменить(ВыхСтр,")", "%29");
ВыхСтр = СтрЗаменить(ВыхСтр,"*", "%2A");
ВыхСтр = СтрЗаменить(ВыхСтр,"+", "%2B");
ВыхСтр = СтрЗаменить(ВыхСтр,",", "%2C");
ВыхСтр = СтрЗаменить(ВыхСтр,"/", "%2F");
ВыхСтр = СтрЗаменить(ВыхСтр,":", "%3A");
ВыхСтр = СтрЗаменить(ВыхСтр,";", "%3B");
ВыхСтр = СтрЗаменить(ВыхСтр,"=", "%3D");
ВыхСтр = СтрЗаменить(ВыхСтр,"?", "%3F");
ВыхСтр = СтрЗаменить(ВыхСтр,"@", "%40");
ВыхСтр = СтрЗаменить(ВыхСтр,"[", "%5B");
ВыхСтр = СтрЗаменить(ВыхСтр,"]", "%5D");
Возврат ВыхСтр;
КонецФункции
Это все под 1С77, но не принципиально - аналогично можно на любом языке сделать...
PS Я ничего "нового не изобретал" когда это делал, все было уже давно, когда только первые запросы под ЦРПТ начинал делать, пришлось с этим разобраться.