Заказы на доработку 1С (сервис удаленной работы)

Хранилище

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

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Перекодировка строки в UTF-8          
Talkman Подменю пользователя
сообщение 12.11.12, 12:04
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 192
Из: Черкассы
Спасибо сказали: 10 раз
Рейтинг: 10

Доброго времени суток. Помогите советом пожалуйста, в какую сторону копать. Задача: Выгрузить в XML файл с кодировкой UTF-8 тег с кирилицей.
В начале было так:
XML_Документ.Кодировка = "UTF-8";
Если ПустоеЗначение(XML_Документ) = 1 Тогда    
         Сообщить("Формат файла не XML!","!");
         Возврат;
КонецЕсли;
        
ФайлЗагрузки = СтрИмяФайла;;
XML_Документ.Загрузить(ФайлЗагрузки);
        
Общий = XML_Документ.ВыбратьУзел("DOCUMENTS");
        
Нов = Общий.СоздатьПодчиненныйЭлемент("DOCUMENT");
Нов.УстановитьАтрибут("id_doc","Р"+НомерДок);                                       //Этот атрибут (НомерДок имеет значение НП-023565)
Нов.УстановитьАтрибут("date_doc",Формат(ДатаДок,"DDMMYY"));  
Нов.УстановитьАтрибут("kontr_id",Контрагент.Код);
Нов.УстановитьАтрибут("podr_id", МестоХранения.Код);
(...)

При сохранении XML файла тег id_doc в файле имеет значение *пара иероглифов*-023565.

Путем великого гугла нарыл функцию ПреобразоватьСтрокуВУТФ8(). Ее листинг:
    Длина=СтрДлина(Стр);
    Итог="";
    Для Н=1 По Длина Цикл
        Знак=Сред(Стр,Н,1);
        Код=КодСимв(Знак);
        Если Код<128 Тогда
            Итог=Итог+Знак;
        Иначе
            Если (Код>=КодСимв("А"))И(Код<=КодСимв("п")) Тогда
                Итог=Итог+Симв(208)+Симв(144+Код-КодСимв("А"));
            ИначеЕсли (Код>=КодСимв("р"))И(Код<=КодСимв("я")) Тогда
                Итог=Итог+Симв(209)+Симв(128+Код-КодСимв("р"));
            ИначеЕсли (Знак="ё") Тогда
                Итог=Итог+Симв(209)+Симв(145);
            ИначеЕсли (Знак="Ё") Тогда
                Итог=Итог+Симв(208)+Симв(129);
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    Возврат Итог;


После
Нов.УстановитьАтрибут("id_doc",ПреобразоватьСтрокуВУТФ8(Строка("Р"+НомерДок)));

значение тега id_doc в файле стало *ИероглифыДругогоВида*-023565...
Не подскажите, как правильнее перекодировать кирилицу в УТФ8, чтобы она адекватно отображалась. Спасибо.

Vofka Подменю пользователя
сообщение 12.11.12, 12:05
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Может у вас в просмотрщике кодировка другая установлена?

Talkman Подменю пользователя
сообщение 12.11.12, 12:12
Сообщение #3

Завсегдатай
****
Группа: Пользователи
Сообщений: 192
Из: Черкассы
Спасибо сказали: 10 раз
Рейтинг: 10

Цитата(Vofka @ 12.11.12, 12:05) *
Может у вас в просмотрщике кодировка другая установлена?


Да смотрел и через эксплорер, и через NP++ и именно в кодировке UTF-8. Мало того, когда я пытаюсь загрузить в ТСД этот файл - пишет ошибку. То бишь трабла действительно в кодировке, как я понимаю...


Talkman Подменю пользователя
сообщение 12.11.12, 15:17
Сообщение #4

Завсегдатай
****
Группа: Пользователи
Сообщений: 192
Из: Черкассы
Спасибо сказали: 10 раз
Рейтинг: 10

Вышел из ситуации через ж... smile.gif.
Если Лев(НомерДок,2) = "НП" Тогда
    НД = Симв(464)+Симв(461)+Симв(463);
ИначеЕсли    Лев(НомерДок,2) = "ЧП" Тогда
    НД = Симв(464)+Симв(471)+Симв(463);    
КонецЕсли;

Нов.УстановитьАтрибут("id_doc",НД+Прав(НомерДок,СтрДлина(номерДок)-2));


Хотя мало понимаю почему так пашет, а по простому нет... Ну да ладно. Спасибо за ваше внимание.

Cthulhu Подменю пользователя
сообщение 22.11.12, 9:43
Сообщение #5

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 224
Из: не ту страну назвали Гондурасом
Спасибо сказали: 83 раз
Рейтинг: 0

Функция Юникоды(Знач Стр="")
    Перем ХТМЛ,Замена,Это;
    Попытка
        Это=СоздатьОбъект("OlePrn.OleCvt");
        Стр=Это.EncodeUnicodeName(Стр);
        Замена="~0";
    Исключение
        ХТМЛ = СоздатьОбъект("htmlfile");
        ХТМЛ.Open("text/html");
        ХТМЛ.Write("<script></script>");
        Стр=ХТМЛ.script.escape(Стр);
        Замена="%u";
    КонецПопытки;
    Для Сч=-2 По -1 Цикл
        Стр=СтрЗаменить(Стр,Лев(Замена,-Сч),"" "");
    КонецЦикла;
    Возврат Нрег(Стр);
КонецФункции    // Юникоды(Стр="")


Функция ШестнадцатьДесять(Стр=0)
    Перем х,Код,Сч;
    х=1;Код=0;
    Для Сч=-СтрДлина(Стр) По -1 Цикл
        Код=Найти("123456789abcdef",Сред(Стр,-Сч,1))*х+Код;
        х=х*16;
    КонецЦикла;
    Возврат Код;
КонецФункции    // ШестнадцатьДесять(Стр=0)

//*******************************************

Процедура Сформировать()
    Стр="Вася Пупкин";
    УТФ8="";
    Стр=Юникоды(Стр);
    Для Сч=1 По СтрКоличествоСтрок(Стр) Цикл
        Код=ШестнадцатьДесять(СтрПолучитьСтроку(Стр,Сч));
        Если Код<128 Тогда
            УТФ8=УТФ8+Симв(Код);
        Иначе
            Если Код<2048 Тогда
                УТФ8=УТФ8+Симв(192 + Цел(Код / 64))+Симв(128 + Код % 64);
            Иначе
                УТФ8=УТФ8+Симв(224 + Цел(Код / 4096))+Симв(128 + Цел((Код % 4096) / 64))+Симв(128 + Цел((Код % 4096) % 64));
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    Сообщить(УТФ8);
    Текст=СоздатьОбъект("Текст");
    Текст.ДобавитьСтроку(УТФ8);
    Текст.Записать("c:\Вася Пупкин.утф8");
КонецПроцедуры

гугль - наше всё / [необходимо зарегистрироваться для просмотра ссылки], автор - Абрахамс (smaharbA)

DizeL Подменю пользователя
сообщение 26.11.13, 12:57
Сообщение #6

Молчаливый
*
Группа: Пользователи
Сообщений: 1
Спасибо сказали: 0 раз
Рейтинг: 0

Привет всем, не хочу создавать новую тему.

Нету ли перекодировщика строки из UTF-16 в простой текст? Заранее спасибо!


 ! 

Правила, п.6
 


Сообщение отредактировал logist - 26.11.13, 13:04

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Тема закрыта Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 07.05.24, 6:49
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!