我有一个字符串包含ASCII中找不到的字符;如á、é、í、ó、ú;我需要一个函数把它们转换成可以接受的值,比如a,e,i,o,u。这是因为我将从这些字符串创建IIS网站(即我将使用它们作为域名)。
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
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
2条答案
按热度按时间hi3rlvi21#
生成的函数将按以下方式转换变音符号:
复制自:http://cosmoskey.blogspot.nl/2009/09/powershell-function-convert.html
ggazkfy82#
以this answer from a C#/.Net question为例,它在PowerShell中的工作方式大致如下:
例如