PDA

Показать полную графическую версию : Получить на выходе файл в кодировке UTF8


Uragan66
01-02-2021, 20:24
Доброго времени суток всем!
Давно пытался разобраться с этим вопросом, да как-то особой надобности не было.
При работе с любыми текстовыми файлами после их сохранения получаем файл в кодировке UTF8-BOM. Эту кодировку не распознают некоторые программы.
Может кто сталкивался с таким, подскажите, пожалуйста, как в версии 5.1 получить на выходе файл в кодировке UTF8 без BOM ?

DJ Mogarych
01-02-2021, 21:00
https://stackoverflow.com/a/5596984

Iska
01-02-2021, 21:05
после их сохранения »
Это как? Покажите пример кода.

как в версии 5.1 получить на выходе файл в кодировке UTF8 без BOM ? »
Например, так:
$oUTF8woBOM = New-Object -TypeName 'System.Text.UTF8Encoding' -ArgumentList $False
[System.IO.File]::WriteAllText('C:\Мои проекты\0335\Sample.txt', 'Мама мыла раму', $oUTF8woBOM)

Uragan66
01-02-2021, 21:47
Покажите пример кода »
да код то любой может быть, к примеру:
$d = '#EXTM3U'
$url = 'https://api.acestream.me/all?api_version=1.0&api_key=test_api_key'
[System.Net.ServicePointManager]::SecurityProtocol = @("Tls12","Tls11","Tls","Ssl3")
$aslist = (Invoke-RestMethod -UseBasicParsing -Uri $url) | ForEach{$('#EXTINF:-1,'+$_.name;'http://127.0.0.1:6878/ace/getstream?infohash='+$_.infohash)}
Set-Content .\acestream.m3u -Encoding utf8 -Value $d,$aslist

Iska
01-02-2021, 22:53
Uragan66, ну, так это тоже не «сохранение файла».

$d = '#EXTM3U'
$url = 'https://api.acestream.me/all?api_version=1.0&api_key=test_api_key'
[System.Net.ServicePointManager]::SecurityProtocol = @("Tls12","Tls11","Tls","Ssl3")

$aslist = `
(Invoke-RestMethod -UseBasicParsing -Uri $url) |`
ForEach-Object -Process {
"#EXTINF:-1,$($_.name)"
"http://127.0.0.1:6878/ace/getstream?infohash=$($_.infohash)"
}
$oUTF8woBOM = New-Object -TypeName 'System.Text.UTF8Encoding' -ArgumentList $False
[System.IO.File]::WriteAllText('C:\Мои проекты\0335\acestream.m3u', ($d, ($aslist -join "`r`n") -join "`r`n"), $oUTF8woBOM)

greg zakharov
01-02-2021, 23:13
Может чего не знаю в этой жизни, но BOM - это ж всего лишь метка последовательности байтов и для UTF-8 она представлена тремя байтами \xEF\xBB\xBF.

Uragan66
01-02-2021, 23:15
Iska, спасибо большое! Код работает ОК. При таком варианте путь для создания файла должен быть только абсолютным, я правильно понял ?
это тоже не «сохранение файла» »
да, всё верно, это я сразу неправильно написал... Сорри

Iska
01-02-2021, 23:18
При таком варианте путь для создания файла должен быть только абсолютным, я правильно понял ? »
Да нет, насколько я полагаю. Укажете относительный (как в Вашем примере) — будет браться относительно текущего каталога (не относительно скрипта!). Хотя я и не проверял.

greg zakharov
01-02-2021, 23:19
СорриПовелительное наклонение глагола "сорить" пишется с одной "р". И да, для чего Iska нужно сорить? :)

Uragan66
01-02-2021, 23:20
BOM - это ж всего лишь метка последовательности байтов »
да, это конечно так. Но, к примеру, некоторые скрипты (скраперы, написанные на lua) плеера SimpleTV не распознают UTF8-BOM

Iska
01-02-2021, 23:20
greg zakharov, в ентих наших интернетах пишут, что, начиная с Core 6, по умолчанию командлеты пользуют UTF-8 без BOM. Это так?

Uragan66
01-02-2021, 23:23
Повелительное наклонение глагола "сорить" пишется с одной "р" »
переключение языков на клавиатуре глючит, поэтому sorry на русском написал... Поставил Comfort Keys, утилита удобна, но теперь почему-то глюки с клавиатурой.

greg zakharov
01-02-2021, 23:26
Iska, ан нету доверия к тырнетам ня прежде, ня таперича, чай всяк на свой ляд калякает.

Uragan66, ааа! ну так сказали бы "мапатиет" - звучит круче и нет неоднозначностей в трактовке.

Iska
01-02-2021, 23:36
greg zakharov, угу.

Так можете подтвердить сие?

DJ Mogarych
02-02-2021, 09:05
начиная с Core 6, по умолчанию командлеты пользуют UTF-8 без BOM. Это так? »
-Encoding
Specifies the type of encoding for the target file. The default value is utf8NoBOM.
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/set-content?view=powershell-7.1&viewFallbackFrom=powershell-6
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/out-file?view=powershell-7.1#parameters

Foreigner
02-02-2021, 10:55
The default value is utf8NoBOM »

Это повлияло на переход на UTF8 системно (intl.cpl). Надоело держать разные версии одного и того же скрипта для 5.1 и 6.* на то время. Поэтому сейчас все на UTF8 -- cmd.exe, Far, обе powershell, ISE и вообще практически все, что читает и пишет. Неудобства иногда встречаются, в основном в локализованных интерфейсах приложений.

Iska
02-02-2021, 14:08
DJ Mogarych, благодарствую.

Foreigner, а я всё на OEM/866 ;).

Prochor
05-02-2021, 11:59
$MyFile = Get-Content C:\callback\callback.bat
$MyFile | Out-File -Encoding "ASCII" C:\callback\callback.bat

DJ Mogarych
05-02-2021, 12:16
-Encoding "ASCII" »
Попробуйте с файлом, где не только английский.




© OSzone.net 2001-2012