Кодирование Xmlstarlet и PowerShell внутри Process C#

Я хочу использовать xmlstarlet из PowerShell, запущенного с Process в приложении C#. Моя главная проблема заключается в том, что когда я использую этот код:

./xml.exe ed -N ns=http://www.w3.org/2006/04/ttaf1 -d '//ns:div[not(contains(@xml:lang,''Italian''))]' "C:\Users\1H144708H\Downloads\a.mul.ttml" > "C:\Users\1H144708H\Downloads\a.mul.ttml.conv"

на powershell я получаю файл с неправильной кодировкой (мне нужен UTF-8).

На Баш я раньше просто

export LANG=it_IT.UTF-8 && 

до xmlstarlet, но на powershell я действительно не знаю, как это сделать. Может быть, есть альтернатива, я видел, что xmlstarlet может использовать sel --encoding utf-8, но я не знаю, как использовать его в режиме ed (я пытался использовать его после xml.exe после ed и т. Д... но это всегда не получится).

Какая альтернатива для экспорта LANG=it_IT.UTF-8 или как использовать --encoding utf-8?

PS. Я пробовал много и много вещей, как:

$MyFile = Get-Content "C:\Users\1H144708H\Downloads\a.mul.ttml"; $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False; [System.IO.File]::WriteAllLines("C:\Users\1H144708H\Downloads\a.mul.ttml.conv", $MyFile, $Utf8NoBomEncoding)

А также:

./xml.exe ed -N ns=http://www.w3.org/2006/04/ttaf1 -d '//ns:div[not(contains(@xml:lang,''Italian''))]' "C:\Users\1H144708H\Downloads\a.mul.ttml" |  Out-File "C:\Users\1H144708H\Downloads\a.mul.ttml.conv" -Encoding utf8

Но такие персонажи, как è à ì ù, все еще ошибаются. Если я пытаюсь сохранить исходный файл с помощью Блокнота до преобразования, он работает (только если я не использую xmlstarlet)... но мне нужно сделать то же самое в powershell, и я не знаю как.

РЕДАКТИРОВАТЬ. Я смог напечатать свой utf8 на powershell:

Get-Content -Path "C:\Users\1H144708H\Downloads\a.mul.ttml" -Encoding UTF8 

Но я все еще не могу сделать то же самое с xmlstarlet.

1 ответ

Решение

В конце концов я решил создать собственный метод C# и просто использовал StreamReader для ReadLine построчно файлом. С помощью простого Contains я решаю, где находится xml:lang="Language", и затем начинаю добавлять каждую строку в строку. Конечно, я добавил заголовок и конец моего файла перед циклом while, и я перестаю добавлять каждую строку, когда читаю строку, которая содержит. Я знаю, что это не лучший способ сделать что-то, но это работает для моего случая.

Другие вопросы по тегам