Как преобразовать Unicode в 1С

03.07.12

Разработка - Универсальные функции

Ох уж эти вечные проблемы с кодировкой…
Долго искал в инете как преобразователь Unicod. Потом все таки сам написал функцию.

Синтаксис:
ПереобразоватьЮникод()

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

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

Описание:
Возвращает преобразованную строку из формата Unicod.

Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.

 

Функция ПереобразоватьЮникод(Строка)

    
    ГотововаяСтрока = "" ;
    
    МасУкр = Новый Массив(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]="ь";  МасУкр[31]="ю"; МасУкр[65]="я";  
        
    
    МасКод = Новый Массив(66) ;
    
    МасКод[0]="0410";   МасКод[1]="0411";  МасКод[2]="0412";  МасКод[3]="0413";  МасКод[4]="0490";  МасКод[5]="0414";
    МасКод[6]="0415";   МасКод[7]="0404";  МасКод[8]="0416";  МасКод[9]="0417";  МасКод[10]="0418"; МасКод[11]="0406";
    МасКод[12]="0407";  МасКод[13]="0419"; МасКод[14]="041A"; МасКод[15]="041B"; МасКод[16]="041C"; МасКод[17]="041D";
    МасКод[18]="041E";  МасКод[19]="041F"; МасКод[20]="0420"; МасКод[21]="0421"; МасКод[22]="0422"; МасКод[23]="0423";
    МасКод[24]="0424";  МасКод[25]="0425"; МасКод[26]="0426"; МасКод[27]="0427"; МасКод[28]="0428"; МасКод[29]="0429";
    МасКод[30]="042C";  МасКод[31]="042E"; МасКод[32]="042F";  

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

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

 

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    3482    Abysswalker    8    

45

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    6442    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    48955    dimanich70    83    

170

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7330    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    61227    atdonya    31    

69

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    9130    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
0. treedo 125 03.07.12 10:11 Сейчас в теме
Ох уж эти вечные проблемы с кодировкой…
Долго искал в инете как преобразователь Unicod. Потом все таки сам написал функцию.



Перейти к публикации

1. Serj1C 484 03.07.12 12:51 Сейчас в теме
А можно было так?
Записать текстовый документ в кодировке Юникод, а потом его прочитать в кодировке Анси?
2. treedo 125 03.07.12 13:49 Сейчас в теме
(1) Serj1C, Нет, нельзя.
3. treedo 125 03.07.12 13:54 Сейчас в теме
Способ называеццо: "Против лома, нет ..."
4. alexk-is 6551 03.07.12 16:37 Сейчас в теме
Мне кажется, что следующий код будет работать побыстрее
КлючИЗначение = Соответствие.Получить(тмпСтрока);
Если КлючИЗначение = Неопределено Тогда
    ....
Иначе
    ГотововаяСтрока = ГотововаяСтрока + КлючИЗначение.Значение;               
КонецЕсли;
5. treedo 125 03.07.12 19:58 Сейчас в теме
(4) alexk-is, Возможно, хз)
6. alexk-is 6551 03.07.12 20:42 Сейчас в теме
(5) А здесь написано, что точно будет быстрее. :)
7. slavik27 111 27.06.13 08:23 Сейчас в теме
спасибо, хороший пример, только жалко с русскими символами нет
8. tolick 35 10.11.15 13:24 Сейчас в теме
Спасибо, пригодилось.
9. 314r 16.02.16 14:40 Сейчас в теме
Вот вариант с русскими буквами. Вдруг кому-то понадобиться :)

Функция ПреобразоватьЮникод(Строка)
    
    МасКир = Новый Массив(66);
	МасКод = Новый Массив(66);
   
МасКир[0]="А";	МасКод[0]="0410";
МасКир[1]="а";	МасКод[1]="0430";
МасКир[2]="Б";	МасКод[2]="0411";
МасКир[3]="б";	МасКод[3]="0431";
МасКир[4]="В";	МасКод[4]="0412";
МасКир[5]="в";	МасКод[5]="0432";
МасКир[6]="Г";	МасКод[6]="0413";
МасКир[7]="г";	МасКод[7]="0433";
МасКир[8]="Д";	МасКод[8]="0414";
МасКир[9]="д";	МасКод[9]="0434";
МасКир[10]="Е";	МасКод[10]="0415";
МасКир[11]="е";	МасКод[11]="0435";
МасКир[12]="Ё";	МасКод[12]="0401";
МасКир[13]="ё";	МасКод[13]="0451";
МасКир[14]="Ж";	МасКод[14]="0416";
МасКир[15]="ж";	МасКод[15]="0436";
МасКир[16]="З";	МасКод[16]="0417";
МасКир[17]="з";	МасКод[17]="0437";
МасКир[18]="И";	МасКод[18]="0418";
МасКир[19]="и";	МасКод[19]="0438";
МасКир[20]="Й";	МасКод[20]="0419";
МасКир[21]="й";	МасКод[21]="0439";
МасКир[22]="К";	МасКод[22]="041a";
МасКир[23]="к";	МасКод[23]="043a";
МасКир[24]="Л";	МасКод[24]="041b";
МасКир[25]="л";	МасКод[25]="043b";
МасКир[26]="М";	МасКод[26]="041c";
МасКир[27]="м";	МасКод[27]="043c";
МасКир[28]="Н";	МасКод[28]="041d";
МасКир[29]="н";	МасКод[29]="043d";
МасКир[30]="О";	МасКод[30]="041e";
МасКир[31]="о";	МасКод[31]="043e";
МасКир[32]="П";	МасКод[32]="041f";
МасКир[33]="п";	МасКод[33]="043f";
МасКир[34]="Р";	МасКод[34]="0420";
МасКир[35]="р";	МасКод[35]="0440";
МасКир[36]="С";	МасКод[36]="0421";
МасКир[37]="с";	МасКод[37]="0441";
МасКир[38]="Т";	МасКод[38]="0422";
МасКир[39]="т";	МасКод[39]="0442";
МасКир[40]="У";	МасКод[40]="0423";
МасКир[41]="у";	МасКод[41]="0443";
МасКир[42]="Ф";	МасКод[42]="0424";
МасКир[43]="ф";	МасКод[43]="0444";
МасКир[44]="Х";	МасКод[44]="0425";
МасКир[45]="х";	МасКод[45]="0445";
МасКир[46]="Ц";	МасКод[46]="0426";
МасКир[47]="ц";	МасКод[47]="0446";
МасКир[48]="Ч";	МасКод[48]="0427";
МасКир[49]="ч";	МасКод[49]="0447";
МасКир[50]="Ш";	МасКод[50]="0428";
МасКир[51]="ш";	МасКод[51]="0448";
МасКир[52]="Щ";	МасКод[52]="0429";
МасКир[53]="щ";	МасКод[53]="0449";
МасКир[54]="Ъ";	МасКод[54]="042a";
МасКир[55]="ъ";	МасКод[55]="044a";
МасКир[56]="Ы";	МасКод[56]="042b";
МасКир[57]="ы";	МасКод[57]="044b";
МасКир[58]="Ь";	МасКод[58]="042c";
МасКир[59]="ь";	МасКод[59]="044c";
МасКир[60]="Э";	МасКод[60]="042d";
МасКир[61]="э";	МасКод[61]="044d";
МасКир[62]="Ю";	МасКод[62]="042e";
МасКир[63]="ю";	МасКод[63]="044e";
МасКир[64]="Я";	МасКод[64]="042f";
МасКир[65]="я";	МасКод[65]="044f";

	ParsedString = Строка;
	Flag = 1;
	
	Пока (Flag = 1) Цикл
		
	PositionOfUnicodeStart = Найти(ParsedString, "\u");
		
	
		Если PositionOfUnicodeStart > 0 тогда
		UnicodeSymbol = Сред(ParsedString, PositionOfUnicodeStart +2, 4);	
		
		FullUnicodeSymbol = "\u" + UnicodeSymbol;
		
		Index = МасКод.Найти(UnicodeSymbol);
			Если Index = Неопределено тогда
			ParsedString = СтрЗаменить(ParsedString, FullUnicodeSymbol, "?UNICODE?");
			Сообщить("Найден неизвестный символ - " + FullUnicodeSymbol); 
			Иначе
			ParsedString = СтрЗаменить(ParsedString, FullUnicodeSymbol, МасКир[Index]);
			КонецЕсли;
				
		Иначе 
		Flag = 0;
		
		КонецЕсли;
					
	КонецЦикла;
	
	Возврат ParsedString;	
КонецФункции
Показать
Danil174; creatermc; KatrinNight; AKZARD; PASAHAKA; AskezaMax; itc_Geo; +7 Ответить
12. sevenlis 77 02.03.19 09:15 Сейчас в теме
(9)
А вот то же самое, только через ТЗ и для 7.7
Функция ПреобразоватьИзЮникод(пСтрока) Экспорт
	тзСимв = СоздатьОбъект("ТаблицаЗначений");
	тзСимв.НоваяКолонка("Кир","Строка",1);
	тзСимв.НоваяКолонка("Код","Строка",4);
	
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "А"; 	тзСимв.Код = "0410";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "а"; 	тзСимв.Код = "0430";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Б"; 	тзСимв.Код = "0411";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "б"; 	тзСимв.Код = "0431";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "В"; 	тзСимв.Код = "0412";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "в"; 	тзСимв.Код = "0432";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Г"; 	тзСимв.Код = "0413";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "г"; 	тзСимв.Код = "0433";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Д"; 	тзСимв.Код = "0414";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "д"; 	тзСимв.Код = "0434";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Е"; 	тзСимв.Код = "0415";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "е"; 	тзСимв.Код = "0435";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Ё"; 	тзСимв.Код = "0401";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "ё"; 	тзСимв.Код = "0451";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Ж"; 	тзСимв.Код = "0416";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "ж"; 	тзСимв.Код = "0436";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "З"; 	тзСимв.Код = "0417";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "з"; 	тзСимв.Код = "0437";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "И"; 	тзСимв.Код = "0418";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "и"; 	тзСимв.Код = "0438";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Й"; 	тзСимв.Код = "0419";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "й"; 	тзСимв.Код = "0439";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "К"; 	тзСимв.Код = "041a";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "к"; 	тзСимв.Код = "043a";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Л"; 	тзСимв.Код = "041b";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "л"; 	тзСимв.Код = "043b";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "М"; 	тзСимв.Код = "041c";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "м"; 	тзСимв.Код = "043c";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Н"; 	тзСимв.Код = "041d";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "н"; 	тзСимв.Код = "043d";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "О"; 	тзСимв.Код = "041e";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "о"; 	тзСимв.Код = "043e";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "П"; 	тзСимв.Код = "041f";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "п"; 	тзСимв.Код = "043f";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Р"; 	тзСимв.Код = "0420";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "р"; 	тзСимв.Код = "0440";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "С"; 	тзСимв.Код = "0421";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "с"; 	тзСимв.Код = "0441";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Т"; 	тзСимв.Код = "0422";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "т"; 	тзСимв.Код = "0442";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "У"; 	тзСимв.Код = "0423";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "у"; 	тзСимв.Код = "0443";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Ф"; 	тзСимв.Код = "0424";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "ф"; 	тзСимв.Код = "0444";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Х"; 	тзСимв.Код = "0425";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "х"; 	тзСимв.Код = "0445";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Ц"; 	тзСимв.Код = "0426";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "ц"; 	тзСимв.Код = "0446";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Ч"; 	тзСимв.Код = "0427";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "ч"; 	тзСимв.Код = "0447";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Ш"; 	тзСимв.Код = "0428";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "ш"; 	тзСимв.Код = "0448";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Щ"; 	тзСимв.Код = "0429";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "щ"; 	тзСимв.Код = "0449";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Ъ"; 	тзСимв.Код = "042a";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "ъ"; 	тзСимв.Код = "044a";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Ы"; 	тзСимв.Код = "042b";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "ы"; 	тзСимв.Код = "044b";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Ь"; 	тзСимв.Код = "042c";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "ь"; 	тзСимв.Код = "044c";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Э"; 	тзСимв.Код = "042d";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "э"; 	тзСимв.Код = "044d";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Ю"; 	тзСимв.Код = "042e";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "ю"; 	тзСимв.Код = "044e";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "Я"; 	тзСимв.Код = "042f";
	тзСимв.НоваяСтрока();
	тзСимв.Кир = "я"; 	тзСимв.Код = "044f";
	
	ParsedString = пСтрока;
	
	PositionOfUnicodeStart = Найти(ParsedString, "\u");
	Пока PositionOfUnicodeStart > 0 Цикл
		UnicodeSymbol 			= Сред(ParsedString, PositionOfUnicodeStart + 2, 4);    
		FullUnicodeSymbol 		= "\u" + UnicodeSymbol;
		
		Index = 0; тзСимв.НайтиЗначение(UnicodeSymbol,Index,"Код");
		Если Index = 0 Тогда
			ParsedString = СтрЗаменить(ParsedString, FullUnicodeSymbol, "?");
			Сообщить("Найден неизвестный символ - " + FullUnicodeSymbol); 
		Иначе
			ParsedString = СтрЗаменить(ParsedString, FullUnicodeSymbol, тзСимв.ПолучитьЗначение(Index,"Кир"));
		КонецЕсли;
		
		PositionOfUnicodeStart 	= Найти(ParsedString, "\u");
	КонецЦикла;
	
	Возврат ParsedString;    
КонецФункции

Показать
10. Buben-128 12.09.16 11:26 Сейчас в теме
Во народ жжот ))))
Удаление зубов через противоположный проход - это круто (наверно)!

Если "напрямую", можно так:

//Пример строки с юникодом
//{"NAME":"\u0421\u043a\u0438\u0434\u043a\u0430 \u043e\u0442 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u041f\u041f - 5%","COUPON":"SL-4IFEJ-S4LCPZB"}

	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(StrJason);
	Пока ЧтениеJSON.Прочитать() Цикл
		Попытка
			Сообщить("Параметр "+ЧтениеJSON.ТекущееЗначение); 
		Исключение			
		КонецПопытки	
	КонецЦикла;
Показать
silly; Dudasmit; Shadow308; echo77; Alien_job; zadevil; +6 Ответить
11. treedo 125 12.09.16 12:01 Сейчас в теме
(10) Buben-128, Статья писалась когда в платформе не было полноценной реализации JSON. Если ваш код рабочий, он намного эффективней и проще.
14. Nikola23 710 17.06.20 09:47 Сейчас в теме
13. Alien_job 193 24.06.19 13:56 Сейчас в теме
(10) Спасибо, работает!
16. Pryanishnikov_Vladimir 13.11.20 12:07 Сейчас в теме
(10)

А как наоброт получить строку с символами юникода такого типа:

\u0421\u043a\u0438\u0434\u043a\u0430 \u043e\u0442 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u041f\u041f
22. pavlo 08.02.24 10:50 Сейчас в теме
15. echo77 1936 20.08.20 12:40 Сейчас в теме
А обратное преобразование как?
17. rintik 19 13.11.20 13:14 Сейчас в теме
(16) Как-то была необходимость.
Функция Hex2Число(Hex) Экспорт
	Стр=ВРег(СокрЛП(Hex));
	Dec=0;
	Для Х=1 По СтрДлина(Стр) Цикл
		Dec=Dec+Найти("123456789ABCDEF",Сред(Стр,Х,1))*Pow(16,СтрДлина(Стр)-Х)
	КонецЦикла;
	Возврат Dec
КонецФункции

Процедура КнопкаВыполнитьНажатие(Кнопка)
	СтрокаПреобразовать = "u0421\u043a\u0438\u0434\u043a\u0430 \u043e\u0442 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u041f\u041f";
	Пока истина Цикл 
		Позиция = Найти(Врег(СтрокаПреобразовать),"\U");
		Если Позиция = 0 Тогда Прервать; КонецЕсли;
		СимволUTF = Сред(мСтрJSON,Позиция,6);
		мСтрJSON = СтрЗаменить(СтрокаПреобразовать,СимволUTF,Символ(Hex2Число(прав(СимволUTF,4))));
	КонецЦикла;
	Сообщить(СтрокаПреобразовать);//Скидка от менеджера ПП¶
КонецПроцедуры

Показать
18. igostv 21.04.21 17:46 Сейчас в теме
Еще одна реализация:
Буквы = СтрРазделить(КодированнаяСтрока, "\u", Ложь);
Результат = "";
Для Каждого Буква Из Буквы Цикл
	БуферДвоичныхДанных = ПолучитьБуферДвоичныхДанныхИзHexСтроки(Буква);
	БуферДвоичныхДанных = БуферДвоичныхДанных.Перевернуть();
	Результат = Результат + ПолучитьСтрокуИзБуфераДвоичныхДанных(БуферДвоичныхДанных, КодировкаТекста.UTF16);
КонецЦикла;
Показать
user1337808; +1 Ответить
19. butters 02.09.21 17:01 Сейчас в теме
//кодируем 
результат = КодироватьСтроку("текст",СпособКодированияСтроки.КодировкаURL,"Windows-1251");
//обратно
результат = РаскодироватьСтроку("%F2%E5%EA%F1%F2",СпособКодированияСтроки.URLВКодировкеURL, "Windows-1251")
20. TMV 3 01.12.21 21:35 Сейчас в теме
(19)
КодироватьСтроку
А теперь так же с Unicod.
21. request4t 29.03.23 22:05 Сейчас в теме
Большое СПАСИБО! Выручили)
23. pavlo 08.02.24 11:34 Сейчас в теме
Для истории, типа такого обратного преобразования текста в unicode остальное допиливать под свои нужды
&НаКлиенте
Функция DecToHex(Знач КодСим) // нашел где то
	База = 16;
	Результат = "";
	Пока КодСим <> 0 Цикл
		Поз =КодСим % База;
		Результат = Сред("0123456789ABCDEF", Поз + 1, 1) + Результат;
		КодСим= Цел(КодСим / База);
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции // DecToHex()

&НаКлиенте
Функция ПолучитьUnicode(Строчка)
	Результат = "";
	Для Сим = 1 По СтрДлина(Строчка) Цикл
		исх = DecToHex(КодСимвола(Сред(Строчка,Сим,1)));
		Если СтрДлина(исх) < 4 Тогда
			Пока СтрДлина(исх) <> 4 Цикл
				исх = "0" + исх;
			КонецЦикла;
		КонецЕсли;
		Результат = Результат + "\\u" + исх;
	КонецЦикла;
	
	Возврат Результат;
КонецФункции

Показать
Для отправки сообщения требуется регистрация/авторизация