7.7 Кодовая страница

Тема в разделе "Общие вопросы "1С:Предприятие 7.7"", создана пользователем gloom_prov, 9 авг 2010.

  1. TopicStarter Overlay
    gloom_prov
    Offline

    gloom_prov

    Регистрация:
    26 дек 2009
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Есть маленькая трабла помогите решить. Есть обработка которая создает текстовый фаил но как известно 1с 7,7 делает его всегда в кодировке ANSI а мне надо UTF-8.

    1.Чем можно воспользоваться для смены кодовой страницы.
    2. Может есть внешнии длл для такого.

    Кароче подможити советами.
  2. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Я решал проблему простой заменой по таблице символов (Симв и КодСимв).
    Плюсы: не нужны внешние компоненты
    Минусы: сравнительно медленно.

    Код:
    // Формируем таблицу соответствий
    Соответствие = СоздатьОбъект("СписокЗначений");
    Соответствие.Установить("а", Симв(208)+Симв(176));
    Соответствие.Установить("б", Симв(208)+Симв(177));
    Соответствие.Установить("в", Симв(208)+Симв(178));
    // ..... и т.д. надо смотреть таблицу соответствий
    Из = СоздатьОбъект("Текст");
    В  = СоздатьОбъект("Текст");
    
    Из.Открыть(ИмяФайла);
    Для Ц = 1 По Из.КоличествоСтрок() Цикл
    СтрИз = Из.ПолучитьСтроку(Ц);
    СтрВ  = "";
    Для ЦЦ = 1 По СтрДлина(СтрИЗ) Цикл
    Если ПустоеЗначение(Соответствие.Получить(Сред(СтрИз, ЦЦ, 1))) = 0 Тогда
    СтрВ = СтрВ + Соответствие.Получить(Сред(СтрИз, ЦЦ, 1));
    Иначе
    СтрВ = СтрВ + Сред(СтрИз, ЦЦ, 1);
    КонецЕсли;
    КонецЦикла;
    В.ДобавитьСтроку(СтрВ);
    КонецЦикла;
    В.Записать(ИмяФайла);
    
    
    Ну или через внешние компоненты

    Код:
    ADODBStream = CreateObject("ADODB.Stream");
    
    ADODBStream.Type = 2;
    ADODBStream.Charset = "windows-1251";
    ADODBStream.Open();
    ADODBStream.LoadFromFile(ФайлРезультат);
    
    Text = ADODBStream.ReadText();
    ADODBStream.Close();
    ADODBStream.Charset = "UTF-8";
    ADODBStream.Open();
    ADODBStream.WriteText(Text);
    ADODBStream.SaveToFile (ФайлРезультат, 2);
    ADODBStream.Close();
    
  3. evgPinsk
    Offline

    evgPinsk Опытный в 1С

    Регистрация:
    27 окт 2010
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    У меня после преобразования в кодировку UTF-8 через ADODB.Stream получается не читаемый текст. Ни как не могу разобраться почему. Возможно потомучто у меня при создании файла через Т.Записать (Файл); создаётся файл с кодировкой OEM 866.

    Код:
    Процедура ПреобразоватьвUTF(Файл_)
        Байт=255;
        СтримВход=СоздатьОбъект("ADODB.Stream");
        СтримВход.Type=2;
        СтримВход.charset="windows-1251";
        СтримВход.Open();
        СтримВход.LoadFromFile(Файл_);
        СтримВыход=СоздатьОбъект("ADODB.Stream");
        СтримВыход.Type=2;
        СтримВыход.charset="utf-8";
        СтримВыход.LineSeparator=-1;
        СтримВыход.Open();
        Всего=СтримВход.size;
        Пока СтримВход.EOS=0 Цикл
            СтримВыход.WriteText(СтримВход.ReadText(Байт),?(Байт=-2,1,0));
            Состояние("" + Формат(100 * СтримВход.position/Всего,"Ч(0)5.2")+"%");
        КонецЦикла;
        СтримВыход.SaveToFile(Файл_,2);
    КонецПроцедуры
    
    Процедура Выполнить()
        Т=СоздатьОбъект ("Текст");
        Т.КодоваяСтраница(1);
        Т.ДобавитьСтроку("Тест");
        Т.Записать ("C:\1.csv");
        ПреобразоватьвUTF("C:\1.csv");
    КонецПроцедуры
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    СтримВыход.WriteText(СтримВход.ReadText(Байт),?(Байт=-2,1,0));
    вы думаете это раборает??????
  5. evgPinsk
    Offline

    evgPinsk Опытный в 1С

    Регистрация:
    27 окт 2010
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Както работает точно. Код взял из инета. Сейчас попробую из этой темы вариант
  6. evgPinsk
    Offline

    evgPinsk Опытный в 1С

    Регистрация:
    27 окт 2010
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Код из 2го сообщения заработал.
  7. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    конечно.. потому что ваш код - не рабочий хотя бы потому что нигде не меняется переменная "байт"
  8. evgPinsk
    Offline

    evgPinsk Опытный в 1С

    Регистрация:
    27 окт 2010
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    А зачем её менять. Насколько я понял, она равна 255, что есть длина читаемой строки. Код мой работал, т.е. менял кодировку, только не совсем так как мне нужно, кирилица не читалась
  9. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    вот это что?
    ?(Байт=-2,1,0)

Поделиться этой страницей