Powershell:替换为西里尔字符串

Powershell: Replace in cyrillic string

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

我的文件使用 BOM/

使用 UTF-8 编码

powershell脚本代码:

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

结果:

将字体从 raster 更改为一些 true type 字体

解决方案:

   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

我无法重现您的问题。不过,让我猜测 [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