Войти

Показать полную графическую версию : [решено] вывод кодировки


Alexander_88
26-12-2023, 11:03
Здравствуйте, есть скрипт, который извлекает ссылки из txt файлов, в результате выводится текстовый файл в кодировке utf 16 le..., можно ли выводить его в кодировке utf 8 ?

Select-String 'C:\work\POSTS\random\*.txt' -Pattern "^\(.+)\\[/b]"| Foreach {$_.Matches.Groups[1].Value} > 'C:\work\Scripts\Create random posts\extract links.txt'

если делаю так, то txt выводится с кодировкой utf 8, но пустой :)

Select-String 'C:\work\POSTS\random\*.txt' -Pattern "^\(.+)\\[/b]"| Foreach {$_.Matches.Groups[1].Value} > 'C:\work\Scripts\Create random posts\extract links.txt' -Encoding "UTF8"

DJ Mogarych
26-12-2023, 12:52
"fff" > "C:\temp\fff.txt"
замените на
"fff" |Out-File "C:\temp\fff.txt" -Encoding utf8

Alexander_88
26-12-2023, 14:04
Спасибо. Сделал так:

Select-String "C:\work\POSTS\random\*.txt" -Pattern "^\(.+)\\[/b]"| Foreach {$_.Matches.Groups[1].Value} |Out-File "C:\work\Scripts\Create random posts\extract links.txt" -Encoding UTF8

заглянул в файл в блокнотике, кодировка "utf8 со спецификацией".. в блокнотике нормально отображается.. но я этот файл считываю в delphi функцией
memo2.Lines.LoadFromFile('C:\Work\Scripts\Create random posts\extract links.txt');
раньше с кодировкой utf16 le в delphi ничего не выводило, сейчас все выводит, но почему то перед всем текстом есть такое



Если я пересохраняю блокнот (руками) в utf8, то такой файл в delphi нормально считывается. Почему файл сохраняется в "utf8 со спецификацией", а не просто в "utf8" ?
посмотрел скрипт через блокнот и исходный файл.. они все в "utf8".

DJ Mogarych
26-12-2023, 14:21
Проще всего установить в систему Powershell 7 и выполнять скрипты через него (pwsh -file "filename.ps1"), и в кодировке использовать

-Encoding UTF8NoBOM


Или подбирать альтернативу в текущей версии:
https://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-without-the-bom

Alexander_88
26-12-2023, 15:51
В общем сделал так:

Select-String "C:\work\POSTS\random\*.txt" -Pattern "^\(.+)\\[/b]"| Foreach {$_.Matches.Groups[1].Value} |Out-File 'C:\work\Scripts\Create random posts\extract links1.txt'
Clear-Content "C:\Work\Scripts\Create random posts\extract links.txt"
Get-Content -Path "C:\Work\Scripts\Create random posts\extract links1.txt" | Add-Content -Path "C:\Work\Scripts\Create random posts\extract links.txt"
Remove-Item "C:\Work\Scripts\Create random posts\extract links1.txt"

глупо, но теперь файл "extract links.txt" в кодировке и delphi его нормально читает, что и требовалось :)




© OSzone.net 2001-2012