2017-10-10 224 views
-2

我有一些字符串包含在ASCII中找不到的字符;如á,é,í,ó,ú;我需要一個函數將它們轉換成可接受的東西,比如a,e,i,o,u。這是因爲我將從這些字符串創建IIS網站(即,我將使用它們作爲域名)。將Unicode字符串轉換爲ASCII

+0

一般情況下,這就是所謂的音譯。正常化到FormD和過濾將工作將組合拉丁字母轉換爲[基本拉丁文](http://www.unicode.org/charts/nameslist/index.html)字母但不是連字(dž,ǣ,ij,...)和這樣。看到這個[問題](https://stackoverflow.com/questions/1841874/how-to-transliterate-cyrillic-to-latin-text)。 –

回答

0
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) 
} 

產生的功能將轉換變音符號在follwoing方式:

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

0

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