Кодирование 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, и я перестаю добавлять каждую строку, когда читаю строку, которая содержит. Я знаю, что это не лучший способ сделать что-то, но это работает для моего случая.