Process C# 中的 Xmlstarlet ed 编码和 powershell
Xmlstarlet ed encoding and powershell inside Process C#
我想在 C# 应用程序中使用从 Process 启动的 powershell 中的 xmlstarlet。
我的主要问题是当我使用这段代码时:
./xml.exe ed -N ns=http://www.w3.org/2006/04/ttaf1 -d '//ns:div[not(contains(@xml:lang,''Italian''))]' "C:\UsersH144708H\Downloads\a.mul.ttml" > "C:\UsersH144708H\Downloads\a.mul.ttml.conv"
在 powershell 上我得到一个编码错误的文件(我需要 UTF-8)。
在 Bash 我曾经只是
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:\UsersH144708H\Downloads\a.mul.ttml"; $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False; [System.IO.File]::WriteAllLines("C:\UsersH144708H\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:\UsersH144708H\Downloads\a.mul.ttml" | Out-File "C:\UsersH144708H\Downloads\a.mul.ttml.conv" -Encoding utf8
但是像è à ì ù 这样的字符仍然是错误的。如果我在转换之前尝试用记事本保存原始文件(仅当我不使用 xmlstarlet 时)...但我需要在 powershell 中做同样的事情,但我不知道如何做。
编辑。
我能够在 powershell 上打印我的 utf8:
Get-Content -Path "C:\UsersH144708H\Downloads\a.mul.ttml" -Encoding UTF8
但我仍然无法用 xmlstarlet 做同样的事情。
最后我决定创建一个本机 C# 方法,我只是使用 StreamReader 逐行读取文件。通过一个简单的包含,我决定 xml:lang="Language" 在哪里,然后我开始将每一行添加到一个字符串中。当然,我在 while 循环之前添加了文件的头部和末尾,并且在读取包含的行时停止添加每一行。我知道这不是最好的做事方式,但它适用于我的情况。
我想在 C# 应用程序中使用从 Process 启动的 powershell 中的 xmlstarlet。 我的主要问题是当我使用这段代码时:
./xml.exe ed -N ns=http://www.w3.org/2006/04/ttaf1 -d '//ns:div[not(contains(@xml:lang,''Italian''))]' "C:\UsersH144708H\Downloads\a.mul.ttml" > "C:\UsersH144708H\Downloads\a.mul.ttml.conv"
在 powershell 上我得到一个编码错误的文件(我需要 UTF-8)。
在 Bash 我曾经只是
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:\UsersH144708H\Downloads\a.mul.ttml"; $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False; [System.IO.File]::WriteAllLines("C:\UsersH144708H\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:\UsersH144708H\Downloads\a.mul.ttml" | Out-File "C:\UsersH144708H\Downloads\a.mul.ttml.conv" -Encoding utf8
但是像è à ì ù 这样的字符仍然是错误的。如果我在转换之前尝试用记事本保存原始文件(仅当我不使用 xmlstarlet 时)...但我需要在 powershell 中做同样的事情,但我不知道如何做。
编辑。 我能够在 powershell 上打印我的 utf8:
Get-Content -Path "C:\UsersH144708H\Downloads\a.mul.ttml" -Encoding UTF8
但我仍然无法用 xmlstarlet 做同样的事情。
最后我决定创建一个本机 C# 方法,我只是使用 StreamReader 逐行读取文件。通过一个简单的包含,我决定 xml:lang="Language" 在哪里,然后我开始将每一行添加到一个字符串中。当然,我在 while 循环之前添加了文件的头部和末尾,并且在读取包含的行时停止添加每一行。我知道这不是最好的做事方式,但它适用于我的情况。