Как преобразовать Unicode в 1С (русский язык)

Публикация № 1009691

Программирование - Практика программирования

Unicode кодировка текст

3
Разработка взята отсюда https://infostart.ru/public/142092/ и переделана для русского языка.
Синтаксис:
ПереобразоватьЮникод(Строка)

Параметры: Строка
(обязательный)
Тип: Строка. 
Исходная строка. 

Возвращаемое значение:
Тип: Строка. 
Строка обработанных символов. 

Описание:
Возвращает преобразованную строку из формата Unicod для русских символов.
Символы " № % \ в русской раскладке не поддерживаются.. хотя их некоторые аналоги  в английской поддерж.
Символы не в Unicode остаются как есть.

Доступность: 
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Функция ПереобразоватьЮникод(Строка) Экспорт

    
    ГотововаяСтрока = "" ;
    
    МасРус = Новый Массив(66) ;
    
    МасРус[0]="А";   МасРус[1]="Б";  МасРус[2]="В";  МасРус[3]="Г";  МасРус[4]="Д";  МасРус[5]="Е";
    МасРус[6]="Ё";   МасРус[7]="Ж";  МасРус[8]="З";  МасРус[9]="И";  МасРус[10]="Й"; МасРус[11]="К";
    МасРус[12]="Л";  МасРус[13]="М"; МасРус[14]="Н"; МасРус[15]="О"; МасРус[16]="П"; МасРус[17]="Р";
    МасРус[18]="С";  МасРус[19]="Т"; МасРус[20]="У"; МасРус[21]="Ф"; МасРус[22]="Х"; МасРус[23]="Ц";
    МасРус[24]="Ч";  МасРус[25]="Ш"; МасРус[26]="Щ"; МасРус[27]="Ъ"; МасРус[28]="Ы"; МасРус[29]="Ь";
    МасРус[30]="Э";  МасРус[31]="Ю"; МасРус[32]="Я";  

    МасРус[33]="а";  МасРус[34]="б"; МасРус[35]="в"; МасРус[36]="г"; МасРус[37]="д"; МасРус[38]="е";
    МасРус[39]="ё";  МасРус[40]="ж"; МасРус[41]="з"; МасРус[42]="и"; МасРус[43]="й"; МасРус[44]="к";
    МасРус[45]="л";  МасРус[46]="м"; МасРус[47]="н"; МасРус[48]="о"; МасРус[49]="п"; МасРус[50]="р";
    МасРус[51]="с";  МасРус[52]="т"; МасРус[53]="у"; МасРус[54]="ф"; МасРус[55]="х"; МасРус[56]="ц";
    МасРус[57]="ч";  МасРус[58]="ш"; МасРус[59]="щ"; МасРус[60]="ъ"; МасРус[61]="ы"; МасРус[62]="ь";
    МасРус[63]="э";  МасРус[64]="ю"; МасРус[65]="я";  
        
    
    МасКод = Новый Массив(66) ;
    
    МасКод[0]="0410";   МасКод[1]="0411";  МасКод[2]="0412";  МасКод[3]="0413";  МасКод[4]="0414";  МасКод[5]="0415";
    МасКод[6]="0401";   МасКод[7]="0416";  МасКод[8]="0417";  МасКод[9]="0418";  МасКод[10]="0419"; МасКод[11]="041A";
    МасКод[12]="041B";  МасКод[13]="041C"; МасКод[14]="041D"; МасКод[15]="041E"; МасКод[16]="041F"; МасКод[17]="0420";
    МасКод[18]="0421";  МасКод[19]="0422"; МасКод[20]="0423"; МасКод[21]="0424"; МасКод[22]="0425"; МасКод[23]="0426";
    МасКод[24]="0427";  МасКод[25]="0428"; МасКод[26]="0429"; МасКод[27]="042A"; МасКод[28]="042B"; МасКод[29]="042C";
    МасКод[30]="042D";  МасКод[31]="042E"; МасКод[32]="042F";  

    МасКод[33]="0430";  МасКод[34]="0431"; МасКод[35]="0432"; МасКод[36]="0433"; МасКод[37]="0434"; МасКод[38]="0435";
    МасКод[39]="0451";  МасКод[40]="0436"; МасКод[41]="0437"; МасКод[42]="0438"; МасКод[43]="0439"; МасКод[44]="043A";
    МасКод[45]="043B";  МасКод[46]="043C"; МасКод[47]="043D"; МасКод[48]="043E"; МасКод[49]="043F"; МасКод[50]="0440";
    МасКод[51]="0441";  МасКод[52]="0442"; МасКод[53]="0443"; МасКод[54]="0444"; МасКод[55]="0445"; МасКод[56]="0446";
    МасКод[57]="0447";  МасКод[58]="0448"; МасКод[59]="0449"; МасКод[60]="044a"; МасКод[61]="044b"; МасКод[62]="044c";
    МасКод[63]="044d";  МасКод[64]="044E"; МасКод[65]="044F";  
    
    
    тмпСтрока = "" ;
    Для Счетчик = 1 По СтрДлина(Строка) Цикл      
        Если Лев(Строка, 1) = "\" Тогда
            Если Лев(Строка, 2) = "\u" Тогда
                
                тмпСтрока = Прав(Лев(Строка, 6),4) ;
                Если МасКод.Найти(тмпСтрока) = Неопределено Тогда
                    СтрокаЗамены = Прав(тмпСтрока, 1) ;
                    тмпСтрока = СтрЗаменить(тмпСтрока,СтрокаЗамены,ТРег(СтрокаЗамены)); 
                    Если МасКод.Найти(тмпСтрока) = Неопределено Тогда
                       // Сообщить("Код символа не найден: " + тмпСтрока) ;
                    Иначе                      
                        ГотововаяСтрока = ГотововаяСтрока + МасРус[МасКод.Найти(тмпСтрока)] ;                                   
                    КонецЕсли;
                Иначе
                    ГотововаяСтрока = ГотововаяСтрока + МасРус[МасКод.Найти(тмпСтрока)] ;               
                КонецЕсли;
                
                Строка = Прав(Строка, (СтрДлина(Строка)-6)) ; 
            Иначе  
                Строка = Прав(Строка, (СтрДлина(Строка)-2)) ;
            КонецЕсли;
        Иначе
            ГотововаяСтрока = ГотововаяСтрока + Лев(Строка, 1) ;
            Строка = Прав(Строка, (СтрДлина(Строка)-1)) ;     
        КонецЕсли;         
    КонецЦикла;   

    Возврат ГотововаяСтрока ;
        
КонецФункции

Но если у вас версия предприятия, поддерживающая JSON (8.3.6 и выше.. по-моему) , можно так

ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Строка);
3

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. markers 237 27.02.19 05:33 Сейчас в теме
Я возможно ошибаюсь, но вроде бы уже 1С 8.2 поддерживала юникод из коробки. К сожалению ни в вашей публикации, ни в публикации на базе которой вы сделали свою, не описан этот момент.
Заранее спасибо!
3. user856012 10 02.03.19 00:39 Сейчас в теме
(1)
вроде бы уже 1С 8.2 поддерживала юникод из коробки
Разумеется, просто в публикациях (этой и той, на которую она ссылается) путаница: кодировка JSON названа Unicode.

Кстати, намек на это есть в комментарии (10) к оригинальной разработке.
4. wrooom 20 07.03.19 02:27 Сейчас в теме
(3) Это не так! Мой метод преобразует из кодировки unicode... А в JSON методе это тоже реализовано, хотя я не проверял.
2. wrooom 20 01.03.19 23:37 Сейчас в теме
Напишите его, пожалуйста. Я им с удовольствием воспользуюсь.
5. markers 237 09.06.19 13:25 Сейчас в теме
(2) Сообщить(КодСимвола("я")); // Десятичное число: 1103 > Шестнадцатеричное число: 044F что соответствует МасКод[65]="044F";
Судя по коду: "Если Лев(Строка, 2) = "\u" Тогда" ваш код конвертирует Java Entities, тогда понятно зачем, но если платформа поддерживает JSON из коробки, этот код теряет смысл. Просьба сделать уточнение, ибо вы теряете тех, кто ищет ваше решение и отвечаете на лишние вопросы от тех, кто не понимает что это.
Заранее спасибо!
6. wrooom 20 09.06.19 17:08 Сейчас в теме
Оставьте свое сообщение