【问题标题】:Converting Unicode string to ASCII将 Unicode 字符串转换为 ASCII
【发布时间】:2018-03-21 08:39:30
【问题描述】:

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

【问题讨论】:

  • 一般都叫音译。规范化为 FormD 和过滤将有助于将组合的拉丁字母转换为 Basic Latin 字母,但不能转换为连字(dž、ǣ、ij、...)等。看到这个question

标签: string powershell unicode ascii special-characters


【解决方案1】:
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

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 2010-12-09
      • 2015-03-29
      • 2013-07-19
      • 2012-07-19
      • 1970-01-01
      • 2016-03-04
      相关资源
      最近更新 更多