PowerShell - [решено] Редактирование файла с символами

Аватара пользователя
ryok

PowerShell - [решено] Редактирование файла с символами

Сообщение ryok »

Есть редактируемый файл, внутри него подобное:





Код:

Код: Выделить всё

 »?ў8bgatvvwfbcmk4joye403s2970IнІе€	ё2Яъ¶цtМ“Ц!9я1

Я работаю с читаемым текстом, но в нем есть также нечитаемые символы/иероглифы.



Если попытаться сделать простейшую замену в этом файле, например:





Код:

Код: Выделить всё

$FILE = Get-Content test.bnk 
$NEWFILE = $FILE -replace "123", ""
$NEWFILE | Set-Content test.bnk

Замена пройдет успешно, но те символы и иероглифы будут переписаны неверно, а это для исполняемой программы критично, отсюда и вопрос как редактировать файл не затрагивая эти символы ?

Пробовал менять кодировки на входе и на выходе, не помогло.

Также пробовал использовать метод System.IO.Stream и там ситуация точно такая же.
Аватара пользователя
Serguei Kouzmine

Re: PowerShell - [решено] Редактирование файла с символами

Сообщение Serguei Kouzmine »

расскажите поподробнее про эту вашу простейшую замену
Аватара пользователя
Sham

Re: PowerShell - [решено] Редактирование файла с символами

Сообщение Sham »

те байты/октеты, которые по формату файла не должны интерпретироваться как коды символов кодировки. Если все байты принудительно читать как текст, то могут быть проблемы, особенно с кодами управляющих символов 00-1f и др. (они не текстовые символы в 1-байтной кодировке типа 1251).
Аватара пользователя
Serguei Kouzmine

Re: PowerShell - [решено] Редактирование файла с символами

Сообщение Serguei Kouzmine »

Цитата Serguei Kouzmine:



расскажите поподробнее про эту вашу простейшую замену
PowerShell - [решено] Редактирование файла с символами




Замена выше это просто пример, важно что происходит после этого, я так понимаю PowerShell переписывает весь файл полностью, а не точечно как может показаться, по всей видимости отсюда и проблема идет, символы и иероглифы он не может перезаписать в том состоянии в котором они находились изначально.

Мне же нужно сделать точеные изменения в файле, без перезаписи всего файла целиком.




Цитата Fors1k:



дайте образец файла.
PowerShell - [решено] Редактирование файла с символами




К сожалению, я не могу это сделать, в файле много конфиденциальных данных, что-то конкретное хотите сделать с файлом ?
Аватара пользователя
Fors1k

Re: PowerShell - [решено] Редактирование файла с символами

Сообщение Fors1k »

что-то типа
этого
наверное. Строка не однобайтная в .net.
Аватара пользователя
Sham

Re: PowerShell - [решено] Редактирование файла с символами

Сообщение Sham »

Цитата ryok:



в файле много конфиденциальных данных
PowerShell - [решено] Редактирование файла с символами




Уберите их/замените на "ёлочка", "ромашка", или оставьте только первые пару строк в которых происходит указанная проблема.
Аватара пользователя
Fors1k

Re: PowerShell - [решено] Редактирование файла с символами

Сообщение Fors1k »

Sham,

Код интересный, буду в нем разбираться, спасибо.



Fors1k,

тестовый файл прикрепил, вот хочу в нем сделать замену :



Код:

Код: Выделить всё

$FILE = Get-Content C:\Users\Ps-2\Desktop\123\test.bnk 
$NEWFILE = $FILE -replace '0', '2'
$NEWFILE | Set-Content C:\Users\Ps-2\Desktop\123\test.bnk

Отрабатывает нормально, но программа уже отказывается работать с таким файлом, а если я сам зайду в файл через Notepad++ и поменяю эту строку 0 на эту 2 то все ок.
Аватара пользователя
ryok

Re: PowerShell - [решено] Редактирование файла с символами

Сообщение ryok »

Sham,

Код интересный, буду в нем разбираться, спасибо.



Fors1k,

тестовый файл прикрепил, вот хочу в нем сделать замену :



Код:

Код: Выделить всё

$FILE = Get-Content C:\Users\Ps-2\Desktop\123\test.bnk 
$NEWFILE = $FILE -replace '0', '2'
$NEWFILE | Set-Content C:\Users\Ps-2\Desktop\123\test.bnk

Отрабатывает нормально, но программа уже отказывается работать с таким файлом, а если я сам зайду в файл через Notepad++ и поменяю эту строку 0 на эту 2 то все ок.
Аватара пользователя
Fors1k

Re: PowerShell - [решено] Редактирование файла с символами

Сообщение Fors1k »

Как я понимаю, кодировка исходного файла - ANSI.

Попробуем указать её строго вручную.



Код:

Код: Выделить всё

cls
$pathIn  = "C:\Users\Ps-2\Desktop\123\test.bnk"
$pathOut = "C:\Users\Ps-2\Desktop\123\test_new.bnk"
$ANSI = [Text.Encoding]::GetEncoding(1251)
$old = [IO.File]::ReadAllText($pathIn, $ANSI)
$new = $old.Replace('0', '2')
[IO.File]::WriteAllText($pathOut, $new, $ANSI)
# Проверка
Start notepad $pathOut
$oldFile = Get-Content $pathIn  -TotalCount 1 -Delimiter "

В итоге после замены в файле, который вы предоставили, ошибок в начальных символах нет. Результат в консоли:



Код:

Код: Выделить всё

До   :  МНє8p7iy6w38emu91ikg56wrvb5axIє ‹	¶`тУлKТР8П—;Сґў9Ѕ1
Аватара пользователя
Sham

Re: PowerShell - [решено] Редактирование файла с символами

Сообщение Sham »

Цитата Sham:



Но бинарные данные это массив байтов, а не текст.
PowerShell - [решено] Редактирование файла с символами




А где здесь бинарные данные есть?
Ответить

Вернуться в «Скриптовые языки администрирования Windows»