【问题标题】:Converting Unicode string to ASCII将 Unicode 字符串转换为 ASCII
【发布时间】:2018-03-21 08:39:30
【问题描述】:
我的字符串包含在 ASCII 中找不到的字符;如á、é、í、ó、ú;我需要一个函数将它们转换为可接受的值,例如 a、e、i、o、u。这是因为我将从这些字符串创建 IIS 网站(即,我将使用它们作为域名)。
【问题讨论】:
标签:
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