Si vous avez besoin de travailler avec tous les caractères, y compris ceux en dehors du BMP (c'est-à-dire les points de code supérieurs à U+FFFF), ou si vous voulez la dernière version d'Unicode, alors passez cette étape et consultez la version plus complète ci-dessous dans la section suivante
Sinon, le script PowerShell ci-dessous peut être utilisé, car il ne nécessite aucun ressource externe, car il utilise le getuname.dll
disponible dans System32
$GetUNameDef = @'
[DllImport("C:/Windows/system32/getuname.dll")]
public static extern int GetUName(
UInt16 wCharCode,
[MarshalAs(UnmanagedType.LPWStr)] Text.StringBuilder lpbuf);
'@
$un = Add-Type -MemberDefinition $GetUNameDef -Name "GetName" `
-PassThru -Namespace Runtime.InteropServices
$name = [Text.StringBuilder]::new(1024)
function Select-Char([string]$pattern) {
1..0xFFFF | ForEach-Object { if ($un::GetUName($_, $name) -gt 0) {
$charName = $name.ToString()
if ($charName -like "*$pattern*") {
"${charName} (U+{0:X4}): $([char]::ConvertFromUtf32($_))" -f $_
}
} }
}
Après cela, vous pouvez appeler Select-Char "pattern"
et copier le caractère souhaité
Exemple de sortie :
PS D:\> Select-Char "dash" | Select-Object -First 4
Figure Dash (U+2012):
En Dash (U+2013): –
Em Dash (U+2014): —
Swung Dash (U+2053):
PS D:\> Select-Char "alpha" | select -First 6
Latin Small Letter Alpha (U+0251):
Latin Small Letter Turned Alpha (U+0252):
Greek Capital Letter Alpha With Tonos (U+0386):
Greek Capital Letter Alpha (U+0391):
Greek Small Letter Alpha With Tonos (U+03AC):
Greek Small Letter Alpha (U+03B1):
Je ne sais pas quelle version Unicode utilise getuname.dll
. Notez également qu'il existe de nombreuses limitations à cela :
- La sortie n'est pas triée par fréquence d'utilisation (ce qui nécessite une solution beaucoup plus complexe qui peut nécessiter l'exécution en tant que service)
- Cela ne fonctionne pas pour les termes non anglais comme le sélecteur d'emoji Windows (chercher chaise ne fonctionnera pas même si vous êtes en localisation française)
- Cela ne réalise pas de correspondance approximative de chaîne ou de conjugaison de mots comme de nombreux sélecteurs d'emoji intelligents modernes ou les IMEs
- Certains caractères peuvent sembler être des déchets car il n'y a pas de police disponible pour eux, mais les copier puis les coller ailleurs fonctionne parfaitement
Si vous avez besoin d'une solution plus complète, vous devez d'abord télécharger la dernière base de données officielle d'Unicode UnicodeData.txt
. Ensuite, vous pouvez utiliser la fonction PowerShell suivante
function Select-UniChar([string]$pattern) {
(Select-String $pattern .\UnicodeData.txt | ForEach-Object {
$codepoint = [uint32]"0x$($_.Line.Substring(0, $_.Line.IndexOf(';')))"
[char]::ConvertFromUtf32($codepoint)
} ) -join ', '
}
Démonstration :
D:\> Select-UniChar "gamma"
, , , , , , , , , , , , , , , , , , , , , , , , , , , ,
Cela fonctionne pour tous les caractères Unicode, mais il présente toujours les mêmes limitations énumérées ci-dessus, et cela ne fonctionnera toujours pas pour de nombreux caractères qui sont combinés à partir de plusieurs points de code comme ceux-ci
La plupart sont des emojis et le script peut être modifié pour rechercher également dans la base de données d'emoji du Consortium Unicode. Mais certains emojis sont vraiment propriétaires de certains vendeurs, donc ils ne sont pas disponibles sur toutes les plateformes et évidemment pas dans la base de données Unicode officielle
Vous pouvez également modifier le script pour imprimer plus d'informations
function Select-UniChar([string]$pattern) {
$textInfo = [cultureinfo]::GetCultureInfo('en-US').TextInfo
sls $pattern .\UnicodeData.txt |% {
$pos1 = $_.Line.IndexOf(';')
$codepoint = [uint32]"0x$($_.Line.Substring(0, $pos1))"
$pos2 = $_.Line.IndexOf(';', $pos1 + 1)
$name = $_.Line.Substring($pos1 + 1, $pos2 - $pos1 - 1).ToLower()
$name = $textInfo.ToTitleCase($name)
$c = [char]::ConvertFromUtf32($codepoint)
"{0} (U+{1}): {2}" -f $name, $codepoint, $c
}
}