|
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
|
Всем спасибо - отбой.
Админ сервера переделал выгрузку в виндозную кодировку. Не успел проверить все варианты. Хоть бы предупредил :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |