Powershell:用西里尔字符串代替

时间:2016-08-22 19:42:33

标签: powershell powershell-v2.0 powershell-v3.0 powershell-v4.0

我无法成功替换西里尔字符串。

我的文件由UTF-8编码,带有BOM /

powershell脚本代码:

$Title = "название видео"
$Title = $Title.Replace("название", "")
Write-Host $Title
cmd /c pause

结果:

Resulting string

3 个答案:

答案 0 :(得分:1)

解决方案:

   function ConvertTo-Encoding ([string]$From, [string]$To){
        Begin{
            $encFrom = [System.Text.Encoding]::GetEncoding($from)
            $encTo = [System.Text.Encoding]::GetEncoding($to)
        }
        Process{
            $bytes = $encTo.GetBytes($_)
            $bytes = [System.Text.Encoding]::Convert($encFrom, $encTo, $bytes)
            $encTo.GetString($bytes)
        }
    }

    [System.Text.Encoding]::Default.Codepage

    $Title = "название видео" | ConvertTo-Encoding "UTF-8" "windows-1251"
    Write-Host $Title
    $Title = $Title.Replace(("название" | ConvertTo-Encoding "UTF-8" "windows-1251"), "")
    Write-Host $Title
    cmd /c pause

答案 1 :(得分:1)

我无法重现你的问题。不过,让我猜一下[System.Console]::OutputEncoding.Codepage的输出是1251。您可以动态地将控制台编码更改为Unicode (UTF-8)(代码页65001);尝试按如下方式修改脚本:

### debug ### [System.Console]::OutputEncoding
[System.Console]::OutputEncoding = [System.Text.Encoding]::UTF8
### debug ### [System.Console]::OutputEncoding
$Title = "название видео"
$Title = $Title.Replace("название", "")
Write-Host $Title
pause

或使用

将控制台编码更改为Unicode(代码页1200
[System.Console]::OutputEncoding = [System.Text.Encoding]::Unicode

答案 2 :(得分:0)

将字体从栅格更改为某些真实类型字体