Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Получить на выходе файл в кодировке UTF8 (http://forum.oszone.net/showthread.php?t=347835)

Uragan66 01-02-2021 20:24 2948381

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

DJ Mogarych 01-02-2021 21:00 2948385

https://stackoverflow.com/a/5596984

Iska 01-02-2021 21:05 2948387

Цитата:

Цитата Uragan66
после их сохранения »

Это как? Покажите пример кода.

Цитата:

Цитата Uragan66
как в версии 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 2948393

Цитата:

Цитата Iska
Покажите пример кода »

да код то любой может быть, к примеру:
Код:

$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 2948402

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 2948406

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

Uragan66 01-02-2021 23:15 2948407

Iska, спасибо большое! Код работает ОК. При таком варианте путь для создания файла должен быть только абсолютным, я правильно понял ?
Цитата:

Цитата Iska
это тоже не «сохранение файла» »

да, всё верно, это я сразу неправильно написал... Сорри

Iska 01-02-2021 23:18 2948408

Цитата:

Цитата Uragan66
При таком варианте путь для создания файла должен быть только абсолютным, я правильно понял ? »

Да нет, насколько я полагаю. Укажете относительный (как в Вашем примере) — будет браться относительно текущего каталога (не относительно скрипта!). Хотя я и не проверял.

greg zakharov 01-02-2021 23:19 2948409

Цитата:

Цитата Uragan66
Сорри

Повелительное наклонение глагола "сорить" пишется с одной "р". И да, для чего Iska нужно сорить? :)

Uragan66 01-02-2021 23:20 2948410

Цитата:

Цитата greg zakharov
BOM - это ж всего лишь метка последовательности байтов »

да, это конечно так. Но, к примеру, некоторые скрипты (скраперы, написанные на lua) плеера SimpleTV не распознают UTF8-BOM

Iska 01-02-2021 23:20 2948411

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

Uragan66 01-02-2021 23:23 2948412

Цитата:

Цитата greg zakharov
Повелительное наклонение глагола "сорить" пишется с одной "р" »

переключение языков на клавиатуре глючит, поэтому sorry на русском написал... Поставил Comfort Keys, утилита удобна, но теперь почему-то глюки с клавиатурой.

greg zakharov 01-02-2021 23:26 2948413

Iska, ан нету доверия к тырнетам ня прежде, ня таперича, чай всяк на свой ляд калякает.

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

Iska 01-02-2021 23:36 2948415

greg zakharov, угу.

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

DJ Mogarych 02-02-2021 09:05 2948426

Цитата:

Цитата Iska
начиная с 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/pow...m=powershell-6
https://docs.microsoft.com/en-us/pow...7.1#parameters

Foreigner 02-02-2021 10:55 2948440

Цитата:

Цитата DJ Mogarych
The default value is utf8NoBOM »

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

Iska 02-02-2021 14:08 2948473

DJ Mogarych, благодарствую.

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

Prochor 05-02-2021 11:59 2948890

$MyFile = Get-Content C:\callback\callback.bat
$MyFile | Out-File -Encoding "ASCII" C:\callback\callback.bat

DJ Mogarych 05-02-2021 12:16 2948892

Цитата:

Цитата Prochor
-Encoding "ASCII" »

Попробуйте с файлом, где не только английский.


Время: 01:26.

Время: 01:26.
© OSzone.net 2001-