powershell 将Unicode字符串转换为ASCII

noj0wjuj  于 2023-06-29  发布在  Shell
关注(0)|答案(2)|浏览(174)

我有一个字符串包含ASCII中找不到的字符;如á、é、í、ó、ú;我需要一个函数把它们转换成可以接受的值,比如a,e,i,o,u。这是因为我将从这些字符串创建IIS网站(即我将使用它们作为域名)。

hi3rlvi2

hi3rlvi21#

function Convert-DiacriticCharacters {
    param(
        [string]$inputString
    )
    [string]$formD = $inputString.Normalize(
            [System.text.NormalizationForm]::FormD
    )
    $stringBuilder = new-object System.Text.StringBuilder
    for ($i = 0; $i -lt $formD.Length; $i++){
        $unicodeCategory = [System.Globalization.CharUnicodeInfo]::GetUnicodeCategory($formD[$i])
        $nonSPacingMark = [System.Globalization.UnicodeCategory]::NonSpacingMark
        if($unicodeCategory -ne $nonSPacingMark){
            $stringBuilder.Append($formD[$i]) | out-null
        }
    }
    $stringBuilder.ToString().Normalize([System.text.NormalizationForm]::FormC)
}

生成的函数将按以下方式转换变音符号:

PS C:\> Convert-DiacriticCharacters "Ångström"
Angstrom
PS C:\> Convert-DiacriticCharacters "Ó señor"
O senor

复制自:http://cosmoskey.blogspot.nl/2009/09/powershell-function-convert.html

ggazkfy8

ggazkfy82#

this answer from a C#/.Net question为例,它在PowerShell中的工作方式大致如下:

function Remove-Diacritics
{
    Param([string]$Text)

    $chars = $Text.Normalize([System.Text.NormalizationForm]::FormD).GetEnumerator().Where{ 

        [System.Char]::GetUnicodeCategory($_) -ne [System.Globalization.UnicodeCategory]::NonSpacingMark

    }

    (-join $chars).Normalize([System.Text.NormalizationForm]::FormC)

}

例如

PS C:\> Remove-Diacritics 'abcdeéfg'
abcdeefg

相关问题