2017-12-05 15 views
2

Unicode標準のすべてのコードポイントには、固有の英語名が付けられています。ドイツ語、フランス語、日本語などの言語へのこれらの名前(小さなコードセットのサブセットの場合)の翻訳が必要です...私はプロの翻訳者にアクセスできるので、これらの名前を1つずつ翻訳することはもちろん可能ですが結果は必ずしもUnicode標準の意図をよく表しているわけではありません。 Unicode委員会が既に英語以外の言語のコードポイント名を標準化しようとしているのではないかと思います。私はunicode.orgで英語以外のものを見つけることはできませんでしたが、私はまだ何かを逃したと思っています。前もって感謝します!Unicode文字の名前の標準化された翻訳はありますか?

答えて

0

.NET/PowerShellの例:[Microsofts.CharMap.UName]::Get('č')

のWindows OSローカライズライブラリgetuname.dllに保存されているローカライズされたUnicodeプロパティ(少なくともnameが、)があります。直接次のスクリプトを使用するか、そこにインスピレーションを得る:

<# 
Origin by: http://poshcode.org/5234 
Improved by: https://stackoverflow.com/users/3439404/josefz 

Use this like this: "ábč",([char]'x'),0xBF | Get-CharInfo 

Activate dot-sourced like this (apply a real path instead of .\): 

. .\_get-CharInfo_1.1.ps1 

#> 

Set-StrictMode -Version latest 

Add-Type -Name UName -Namespace Microsofts.CharMap -MemberDefinition $(
    switch ("$([System.Environment]::SystemDirectory -replace 
       '\\', '\\')\\getuname.dll") { 
    {Test-Path -LiteralPath $_ -PathType Leaf} {@" 
[DllImport("${_}", ExactSpelling=true, SetLastError=true)] 
private static extern int GetUName(ushort wCharCode, 
    [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder buf); 

public static string Get(char ch) { 
    var sb = new System.Text.StringBuilder(300); 
    UName.GetUName(ch, sb); 
    return sb.ToString(); 
} 
"@ 
    } 
    default {'public static string Get(char ch) { return "???"; }'} 
    }) 

function Get-CharInfo { 
    [CmdletBinding()] 
    [OutputType([System.Management.Automation.PSCustomObject],[System.Array])] 
    param(
     [Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)] 
     $InputObject 
    ) 
    begin { 
     function out { 
      param(
       [Parameter(Position=0, Mandatory=$true)] $ch, 
       [Parameter(Position=1, Mandatory=$false)]$nil='' 
       ) 
      if (0 -le $ch -and 0xFFFF -ge $ch) { 
       [pscustomobject]@{ 
        Char = [char]$ch 
        CodePoint = 'U+{0:X4}' -f $ch 
        Category = [System.Globalization.CharUnicodeInfo]::GetUnicodeCategory($ch) 
        Description = [Microsofts.CharMap.UName]::Get($ch) 
       } 
      } elseif (0 -le $ch -and 0x10FFFF -ge $ch) { 
       $s = [char]::ConvertFromUtf32($ch) 
       [pscustomobject]@{ 
        Char = $s 
        CodePoint = 'U+{0:X}' -f $ch 
        Category = [System.Globalization.CharUnicodeInfo]::GetUnicodeCategory($s, 0) 
        Description = '???' + $nil 
       } 
      } else { 
       Write-Warning ('Character U+{0:X} is out of range' -f $ch) 
      } 
     } 
    } 
    process { 
     if ($PSBoundParameters['Verbose']) { 
      Write-Warning "InputObject type = $($InputObject.GetType().Name)"} 
     if ($null -cne ($InputObject -as [char])) { 
      #Write-Verbose "A $([char]$InputObject) InputObject character" 
      out $([int][char]$InputObject) '' 
     } elseif ($InputObject -isnot [string] -and $null -cne ($InputObject -as [int])) { 
      #Write-Verbose "B $InputObject InputObject" 
      out $([int]$InputObject) '' 
     } else { 
      $InputObject = [string]$InputObject 
      #Write-Verbose "C $InputObject InputObject.Length $($InputObject.Length)" 
      for ($i = 0; $i -lt $InputObject.Length; ++$i) { 
       if ( [char]::IsHighSurrogate($InputObject[$i]) -and 
         (1+$i) -lt $InputObject.Length -and 
         [char]::IsLowSurrogate($InputObject[$i+1])) { 
        $aux = ' 0x{0:x4},0x{1:x4}' -f [int]$InputObject[$i], 
                [int]$InputObject[$i+1] 
        Write-Verbose "surrogate pair $aux at position $i" 
        out $([char]::ConvertToUtf32($InputObject[$i], $InputObject[1+$i])) $aux 
        $i++ 
       } else { 
        out $([int][char]$InputObject[$i]) '' 
       } 
      } 
     } 
    } 
} 

:後者(半ローカライズ)の出力は、次のコードから来ること

PS D:\PShell> "ábč",([char]'x'),0xBF | Get-CharInfo 

Char CodePoint   Category Description      
---- ---------   -------- -----------      
    á U+00E1  LowercaseLetter Latin Small Letter A With Acute 
    b U+0062  LowercaseLetter Latin Small Letter B   
    č U+010D  LowercaseLetter Latin Small Letter C With Caron 
    x U+0078  LowercaseLetter Latin Small Letter X   
    ¿ U+00BF OtherPunctuation Inverted Question Mark   

PS D:\PShell> Get-Content .\DataFiles\getcharinfoczech.txt 

Char CodePoint   Category Description        
---- ---------   -------- -----------        
    á U+00E1  LowercaseLetter Malé písmeno latinky a s čárkou nad vpravo 
    b U+0062  LowercaseLetter Malé písmeno latinky b      
    č U+010D  LowercaseLetter Malé písmeno latinky c s háčkem   
    x U+0078  LowercaseLetter Malé písmeno latinky x      
    ¿ U+00BF OtherPunctuation Znak obráceného otazníku     

PS D:\PShell> 

ノート(同じコンピュータ上で実行ローカライズされたユーザーの下で):

"ábč",([char]'x'),0xBF | Get-CharInfo | Out-File .\DataFiles\getcharinfoczech.txt 
関連する問題