Как изменить кодировку при записи файла

Поддержка
  • @avtopars

    Если не сложно приложите рабочий проект

    Вот тестовый проект ansi кодировка для csv.xml

  • @fox
    Все работает! большое спасибо!

  • @avtopars

    Не работает, в екселе все равно при открытии кряказябры,а у Вы пробывали открывать екселем ? у Вас кирилица ?

    Да проверил
    0_1532410860252_на форум 43.png
    всё работает.


    Все работает! большое спасибо!

    Пока писал ответ вы изменили сообщение :D. Ну главное, что работает

  • @fox если сохранить сначала в txt, а потом поменять расширение на csv, то с кодировкой все норм

  • @kain Сохранил в txt, переименовал в csv, открыл в Excel, результат:
    0_1532767979814_на форум 59.png
    файл 1.txt
    Переименованный файл 1.csv


    Так что перекодировать всё равно приходится

  • @fox
    А как указать путь чтоб брало файл с диска С:papka и ставило туда-же после перекодирования?
    В Вашем примере работает только когда исходный файл лежит в папке AppData\Roaming\BrowserAutomationStudio\apps\21.0.1\
    если там его нету то какие пути не указывай - не работает
    пробывал так iconv -t WINDOWS-1251 -f UTF-8 C:\test\1.csv > "C:\test\1.csv"
    может что не то делаю?
    Записывает C:\test\1.csv нормально после перекодировки пустой файл

  • @avtopars Вы посмотрите внимательнее, я сам этот файл создаю в директории

    AppData\Roaming\BrowserAutomationStudio\apps\21.0.1\
    

    и потом его конвертирую в нужную папку.


    пробывал так iconv -t WINDOWS-1251 -f UTF-8 C:\test\1.csv > "C:\test\1.csv"

    Нужно сохранять в другой файл. Можете поменять папку и сохранять с этим же именем

  • Мда... 2 дня гемора и наконец решение,мож кому-то тоже пригодится.
    Суть такая
    Проект от @fox работает,делаю вроде все так-же но ничего не работает.
    Вместо нужного результата после смены кодировки получаю свой файл но он пустой 0 байт.
    Создал новый проект чистый делаю все с нуля все работает, возвращаюсь в старый проект и тут вроде все также но не пашет и все тут...
    Решение оказалось банальным в старом проекте в названии файла было пару слов и из-за пробелов нечего не работало. Если файл 1 слово все прекрасно конвертируется.
    Логичный вопрос как решить проблему пробелов? Вернее как писать название файлов с пробелами так чтоб утилита это понимала?

  • @avtopars Действие "выполнить процесс" по сути создаёт bat файл и выполняет его, грубо говоря. А в командной строке если в пути встречается кирилица или пробелы, его обрамляют в кавычки. По сути можно любой путь обрамлять в кавычки, на всякий случай и всё.

  • @fox
    Вы говорили что пользуетесь утилиткой давно,а проблем не возникало с конвертацией?
    У меня почему-то она обрезает файл
    Например csv оригинал имеет 130 строк выходной подрезает и получается 100 или 25-75 как получится...
    от чего зависит не знаю но факт такой есть и это точно она делает,а не бас и ничто другое.
    Кстати не всегда иногда и полный файл выдает

  • @avtopars

    Вы говорили что пользуетесь утилиткой давно

    Где я такое говорил?

    Например csv оригинал имеет 130 строк выходной подрезает и получается 100 или 25-75 как получится...

    Приложите проблемый файл к сообщению. посмотрю в чём может быть причина

  • В общем проблема более менее понятна.
    Встречаются разные символы на источнике которые утилита не читает или не понимает, если их заменять на что-то тогда конвертится нормально без обрезок.
    Символы которые встречаются в разных случаях разные,тут помоему общего решения нет. В каждом отдельном случае нужно смотреть на чем затык и добавлять его в обработку

  • Как пример слова не нашего алфавита Pułaskiego Namysłów
    ну и вот на символах ł ó и будет обрезка
    Ну и символы типа 89×65×92 см где встретится × там и порежет
    @fox может есть мысли по поводу решения проблемы?

  • Обратился к разработчику за помощью в решении проблемы с конвертацией.
    Выложу это тут для будущих поколений ))
    Через node js проблема решается полностью, для работы нужно поставить модуль encoding
    Следующий код решает проблемы

    var fs = require('fs');
    var encoding = require('encoding');
    
    //Читаем файл в utf-8 кодировке(BAS всегда сохраняет в utf-8)
    var text = fs.readFileSync('C:/dev/encoding/text.txt', 'UTF-8');
    
    //Конвертим
    var result = encoding.convert(text, 'WINDOWS-1251', 'UTF-8');
    
    //Пишем в файл
    fs.writeFileSync('C:/dev/encoding/converted.txt', result);
    

    Код если пути у нас в переменных

    var fs = require('fs');
    var encoding = require('encoding');
    
    //Читаем файл в utf-8 кодировке(BAS всегда сохраняет в utf-8)
    var text = fs.readFileSync([[NEW_VARIABLE]] + '111.csv', 'UTF-8');
    
    //Конвертим
    var result = encoding.convert(text, 'WINDOWS-1251', 'UTF-8');
    
    //Пишем в файл
    fs.writeFileSync([[NEW_VARIABLE2]] + '222.csv', result);
    

    Отдельная благодарность @fox за участие и консультации

  • @avtopars Пасиб, не только будущих но и счас. В лайв хаки можно смело. Правда с "узлами" не все дружат.. Пойдут вопросы как))

  • @fox возможно это только в лайброфис.
    Сейчас новый прикол) Конвертирую после каждой записи и сейчас перестал дописывать сконвертированный файл после того, как он начинает весить где-то 13кб) Хрен знает почему)

  • @fox Перезаписываю кодировку файла csv по вашему проекту. Почему то перезаписывается только первая строчка, а остальные удаляются.

  • Сработал вариант @avtopars при сохранении.
    Но потом когда BAS открывает заново этот файл он уже нечитаем.
    Как его при открытии сконвертировать обратно в UTF-8
    Пробовал заменить этот же вариант так:

    var fs = require('fs');
    var encoding = require('encoding');
    
    //Читаем файл в utf-8 кодировке(BAS всегда сохраняет в utf-8)
    var text = fs.readFileSync([[NEW_VARIABLE]] + '111.csv', 'WINDOWS-1251');
    
    //Конвертим
    var result = encoding.convert(text, 'UTF-8', 'WINDOWS-1251');
    
    //Пишем в файл
    fs.writeFileSync([[NEW_VARIABLE2]] + '222.csv', result);
    

    Но ничего не получилось, кто-то знает решение? Спасибо.

  • @saanneekk

    const fs = require('fs');
    const encoding = require('encoding');
    
    let text = fs.readFileSync('./1251.txt');
    text = encoding.convert(text, 'UTF-8', 'WINDOWS-1251');
    fs.writeFileSync('./utf8.txt', text);
    
  • This post is deleted!

  • 0 Votes
    3 Posts
    469 Views
  • 0 Votes
    3 Posts
    496 Views
  • 0 Votes
    6 Posts
    1023 Views
  • 0 Votes
    11 Posts
    925 Views
  • 0 Votes
    8 Posts
    1425 Views