Как преобразовать 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)) ;     
        КонецЕсли;         
    КонецЦикла;   

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

 

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

18.03.2024    2669    0    John_d    8    

54

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

12.02.2024    4600    atdonya    22    

45

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

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

30.11.2023    3960    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8813    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16143    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7242    quazare    8    

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



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

1. Serj1C 483 03.07.12 12:51 Сейчас в теме
А можно было так?
Записать текстовый документ в кодировке Юникод, а потом его прочитать в кодировке Анси?
2. treedo 124 03.07.12 13:49 Сейчас в теме
3. treedo 124 03.07.12 13:54 Сейчас в теме
Способ называеццо: "Против лома, нет ..."
4. alexk-is 6533 03.07.12 16:37 Сейчас в теме
Мне кажется, что следующий код будет работать побыстрее
КлючИЗначение = Соответствие.Получить(тмпСтрока);
Если КлючИЗначение = Неопределено Тогда
    ....
Иначе
    ГотововаяСтрока = ГотововаяСтрока + КлючИЗначение.Значение;               
КонецЕсли;
5. treedo 124 03.07.12 19:58 Сейчас в теме
6. alexk-is 6533 03.07.12 20:42 Сейчас в теме
(5) А здесь написано, что точно будет быстрее. :)
7. slavik27 88 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 69 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 124 12.09.16 12:01 Сейчас в теме
(10) Buben-128, Статья писалась когда в платформе не было полноценной реализации JSON. Если ваш код рабочий, он намного эффективней и проще.
14. Nikola23 696 17.06.20 09:47 Сейчас в теме
13. Alien_job 190 24.06.19 13:56 Сейчас в теме
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 1868 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 14 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" + исх;
	КонецЦикла;
	
	Возврат Результат;
КонецФункции

Показать
Оставьте свое сообщение