@Alekseewka https://github.com/Danny-Dasilva/CycleTLS
Как изменить кодировку при записи файла
-
Сам недавно столкнулся с кодировкой csv файла. Кирилицу в utf-8 безжалостно в крокозябры превращает. Но iconv быстро конвертит.
Если не сложно приложите рабочий проект, все что видел и есть на форуме уже все перепробывал ничего не работало,кряказябры все равно есть если через ексель тот-же csv открыть
-
-
Не работает, в екселе все равно при открытии кряказябры,а у Вы пробывали открывать екселем ? у Вас кирилица ?
Да проверил

всё работает.
Все работает! большое спасибо!
Пока писал ответ вы изменили сообщение
:D. Ну главное, что работает -
@kain Сохранил в txt, переименовал в csv, открыл в Excel, результат:

файл 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 как получится...
от чего зависит не знаю но факт такой есть и это точно она делает,а не бас и ничто другое.
Кстати не всегда иногда и полный файл выдает -
Вы говорили что пользуетесь утилиткой давно
Где я такое говорил?
Например csv оригинал имеет 130 строк выходной подрезает и получается 100 или 25-75 как получится...
Приложите проблемый файл к сообщению. посмотрю в чём может быть причина
-
В общем проблема более менее понятна.
Встречаются разные символы на источнике которые утилита не читает или не понимает, если их заменять на что-то тогда конвертится нормально без обрезок.
Символы которые встречаются в разных случаях разные,тут помоему общего решения нет. В каждом отдельном случае нужно смотреть на чем затык и добавлять его в обработку -
Обратился к разработчику за помощью в решении проблемы с конвертацией.
Выложу это тут для будущих поколений ))
Через 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 за участие и консультации