gifts2017

Простое решение проблемы с казахстанской кодировкой

Опубликовал Сергей Шахов (Gvozdod) в раздел Программирование - Практика программирования

Известно, что для того, чтобы работать в 1С с казахскими шрифтами, нужно изменить кодировку в ОС. Иногда это может быть не очень удобно.

Известно, что для того, чтобы работать в 1С с казахскими шрифтами, нужно изменить кодировку в ОС. Иногда это может быть не очень удобно. Посудите сами: изменяется порядок сортировки. Необходимо пересоздавать базы, все клиентские системы, работающие с этими базами, переводить на новую кодировку. А если на клиентской машине стоит кодировка отличная от стандартной 1251, то 1С:Предприятие просто не сможет подключится к базе данных со стандартной кодировкой. Т.е. изменяя системную кодировку, вы должны все рабочие базы 1С перевести на новую кодировку. Со старыми версиями SQL опять же возникают сложности хранения и обработки данных. А ведь нужно всё это лишь для одной цели: Отправлять текст с казахскими буквами в третью программу. Будь то хоть Банк-клиент, хоть Программа для отправки налоговой или статистической отчетности.

Я решил эту проблему простым способом. Предлагаю не менять системной кодировки. В базе данных можно хранить текст и без казахских букв. А в тот момент, когда мы выгружаем данные из 1С в другую программу, просто преобразовать специальные буквосчетания в казахские буквы.

Кодировка СТ РК 1048-2002 (Windows), отличается от стандартной 1251 лишь тем, что в нее добавлены 9 новых букв:

 

Буква

Подстрока

Десятичный код

HEX

|0;

Э

163

A3

|1;

э

188

BC

І

И

178

B2

і

и

179

B3

v6;

Н

189

BD

v7;

н

190

BE

u0;

Г

170

AA

u1;

г

186

BA

w8;

У

175

AF

w9;

у

191

BF

x0;

У’’

161

A1

x1;

у’’

162

A2

u8;

К

141

8D

u9;

к

157

9D

}6;

О

165

A5

}7;

о

180

B4

y0;

Х

142

8E

y1;

х

158

9E

 

 

Функция Каз(Текст) Экспорт
    //* преобразовать казахские символы
    Рез=СтрЗаменить(Текст,"Э'",Симв(163));
    Рез=СтрЗаменить(Рез,"э'",Симв(188));
    Рез=СтрЗаменить(Рез,"И'",Симв(178));
    Рез=СтрЗаменить(Рез,"и'",Симв(179));
    Рез=СтрЗаменить(Рез,"Н'",Симв(189));
    Рез=СтрЗаменить(Рез,"н'",Симв(190));
    Рез=СтрЗаменить(Рез,"Г'",Симв(170));
    Рез=СтрЗаменить(Рез,"г'",Симв(186));
    Рез=СтрЗаменить(Рез,"У''",Симв(161));
    Рез=СтрЗаменить(Рез,"у''",Симв(162));
    Рез=СтрЗаменить(Рез,"У'",Симв(175));
    Рез=СтрЗаменить(Рез,"у'",Симв(191));
    Рез=СтрЗаменить(Рез,"К'",Симв(141));
    Рез=СтрЗаменить(Рез,"к'",Симв(157));
    Рез=СтрЗаменить(Рез,"О'",Симв(165));
    Рез=СтрЗаменить(Рез,"о'",Симв(180));
    Рез=СтрЗаменить(Рез,"Х'",Симв(142));
    Рез=СтрЗаменить(Рез,"х'",Симв(158));
    Возврат Рез;
КонецФункции // ПреобразоватьКазСимв


Пример использования:

Каз("К'азак'стан Республикасы") = u8;азаu9;стан Республикасы

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Buzz (Resembler) 06.02.10 17:09
Плюс. Спасибо! Очень хороший и довольно изящный способ! Как раз то, что искал!
2. Volodya Shin (volodya_shin) 10.11.10 07:59
Супер! Думаю проще и гениальней не придумаешь, хотя ...