|   |   | 
| 
 | v7: Перекодировка txt из utf-8 в windows-1251 через Adodb.Stream не работает | ☑ | ||
|---|---|---|---|---|
| 0
    
        OnePrg 02.02.23✎ 13:41 | 
        Взял за пример перекодировку из windows-1251 в utf-8. Не работает.
 СтримВход=СоздатьОбъект("ADODB.Stream"); СтримВход.Type=2; СтримВход.charset="utf-8"; СтримВход.Open(); СтримВход.LoadFromFile(ИмяФайлаУТФ8); СтримВыход=СоздатьОбъект("ADODB.Stream"); СтримВыход.Type=2; СтримВыход.charset="windows-1251"; //СтримВыход.LineSeparator=-1; СтримВыход.Open(); Всего=СтримВход.size; Пока СтримВход.EOS=0 Цикл СтримВыход.WriteText(СтримВход.ReadText(Байт),?(Байт=-2,1,0)); Состояние("" + Формат(100 * СтримВход.position/Всего,"Ч(0)5.2")+"%"); КонецЦикла; СтримВыход.SaveToFile(ИмяФайла1251,2); Получается кодировка ANSI, а нужно windows-1251/ | |||
| 1
    
        Fedor-1971 02.02.23✎ 13:53 | 
        (0) так, на русской локали это и будет 1251, а что соответствует ANSI указывается в ветке реестра     | |||
| 2
    
        KJlag 02.02.23✎ 13:59 | 
        (0) в клюшках не работал, но вот это там не работает?
 ТекстовыйДокумент (TextDocument) Записать (Write) Вариант синтаксиса: В файл Синтаксис: Записать(<ИмяФайла>, <ТипФайла>, <РазделительСтрок>) Параметры: <ИмяФайла> (обязательный) Тип: Строка. Имя файла для сохранения текста. <ТипФайла> (необязательный) Тип: КодировкаТекста, Строка. а именно указать кодировку вторым параметром? | |||
| 3
    
        OnePrg 02.02.23✎ 14:02 | 
        (2) 
 КодоваяСтраница(<?>) Синтаксис: КодоваяСтраница(<Режим>) Назначение: Установить режим кодировки текста. Возвращает: текущее числовое значение режима кодировки (на момент до исполнения метода). Параметры: <Режим> : 0 - windows-кодировка, 1 - DOS-кодировка. Оба режима пробовал - не работает. | |||
| 4
    
        arsik гуру 02.02.23✎ 14:09 | 
        (0) Просто через ADODB.Stream прочитай текст из utf файла и запиши его уже стандартными средствами 1С чрез текстовый документ.     | |||
| 5
    
        Gary417 02.02.23✎ 14:13 | 
        (0) "windows-1251"; 
 а там параметр не регистрозависимый? Windows-1251 (как в примере на сайте MS) | |||
| 6
    
        Gary417 02.02.23✎ 14:13 | 
        и charset с большой буквы     | |||
| 7
    
        arsik гуру 02.02.23✎ 14:20 | 
        Может проще csv сразу через ADODB.Connection ADODB.Recordset читать. Зачем эти полумеры с преобразованием?     | |||
| 8
    
        OnePrg 02.02.23✎ 14:22 | 
        (4) 
 СтримВход=СоздатьОбъект("ADODB.Stream"); СтримВход.Type=2; СтримВход.charset="UTF-8"; СтримВход.Open(); СтримВход.LoadFromFile(ИмяФайлаУТФ8); СтримВход.charset="windows-1251"; Т = СоздатьОбъект("Текст"); Т.КодоваяСтраница(0); Т.ДобавитьСтроку(СтримВход.ReadText()); Т.Записать(ИмяФайла1251); так тоже не работает | |||
| 9
    
        OnePrg 02.02.23✎ 14:22 | 
        (5) 
 проверил - не регистрозависимый | |||
| 10
    
        OnePrg 02.02.23✎ 14:23 | 
        (7) дай пример     | |||
| 11
    
        arsik гуру 02.02.23✎ 14:23 | ||||
| 12
    
        Gary417 02.02.23✎ 14:27 | ||||
| 13
    
        Gary417 02.02.23✎ 14:27 | 
        (12) как надо, два объекта adodb     | |||
| 14
    
        arsik гуру 02.02.23✎ 14:32 | 
        (12) Меня вот эта строка в (0) беспокоит "СтримВыход.WriteText(СтримВход.ReadText(Байт),?(Байт=-2,1,0));"
 Не факт, что 1С в этот момент "СтримВход.ReadText(Байт)" строковое значение не преобразует. | |||
| 15
    
        Злопчинский 02.02.23✎ 14:41 | 
        //********************************************************************************************************************************
 // http://www.skalnyy.com/1s-perekodirovka-fajla/ // ВОЗМОЖНЫЕ ВАРИАНТЫ КОДИРОВОК "UTF-8" "KOI8-R" "Windows-1251" "ISO-8859-5" Процедура глИзменитьКодовуюСтраницуФайла(имяФайла, исходнКодировка, нужнаяКодировка) Экспорт Если ФС.СуществуетФайл(имяФайла) = 0 Тогда Сообщить("Файл " + имяФайла + " - не найден! Изменение кодировки отменено.", "!"); Возврат; КонецЕсли; ScrptCtrl = СоздатьОбъект("MSScriptControl.ScriptControl"); ScrptCtrl.Language = "VBScript"; ScrptCtrl.AddCode(" |Function StrConv(Text,SourceCharset,DestCharset) | Set Stream=CreateObject(""ADODB.Stream"") | Stream.Type=2 | Stream.Mode=3 | Stream.Open | Stream.Charset=DestCharset | Stream.WriteText Text | Stream.Position=0 | Stream.Charset=SourceCharset | StrConv=Stream.ReadText |End Function | |sub ConvertCodepage( fileName, SourceCharset, DestCharset ) | set fs = CreateObject(""Scripting.FilesystemObject"") | originalText = fs.openTextFile(fileName,1).readAll() | convertedText = strConv(originalText, SourceCharset, DestCharset ) | fs.openTextFile(fileName,2,true).write(convertedText) |end sub | |"); Module = ScrptCtrl.Modules("Global"); CodeObject = Module.CodeObject; CodeObject.ConvertCodepage(имяФайла, исходнКодировка, нужнаяКодировка); КонецПроцедуры //ИзменитьКодовуюСтраницуФайла() | |||
| 16
    
        OnePrg 02.02.23✎ 14:51 | 
        (15) 
 CodeObject.ConvertCodepage(имяФайла, исходнКодировка, нужнаяКодировка); <-- Ошибка выполнения Microsoft VBScript: Недопустимый вызов или аргумент процедуры исходнКодировка = "UTF-8" нужнаяКодировка = "Windows-1251" | |||
| 17
    
        Злопчинский 02.02.23✎ 16:07 | 
        (16) пичалька...может http://calendar.vpogiba.info/wg/wsh/uconv.htm     | |||
| 18
    
        OnePrg 02.02.23✎ 16:50 | 
        Всем спасибо - отбой.
 Админ сервера переделал выгрузку в виндозную кодировку. Не успел проверить все варианты. Хоть бы предупредил :) | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |