Unicode-Zeichenauswahl

Zu oft finde ich mich dabei, „Unicode“ zu googeln, um ein Unicode-Zeichen zu finden, das für meine Bedürfnisse geeignet ist. Ich versuche jetzt, diese dumme Prozedur durch etwas Reproduzierbareres und Zuverlässigeres zu ersetzen, also suche ich nach einer Unicode-Zeichenauswahl, die unter Windows offline funktioniert.

Anforderungen:

  • Wählen Sie Unicode-Zeichen aus, indem Sie durch sie scrollen
  • unterstützt die Eingabe beschreibender Namen wie "Kreuz" oder "Box"
  • arbeitet offline, dh installiert lokal eine eigene Unicode-Datenbank
  • funktioniert unter Windows
  • ist kostenlos
  • keine Werbung; Spenden-Button ist akzeptabel

Ideal:

  • Regionen wie „Mathematische Symbole“, „Griechisch“ oder ähnliches wie in Microsoft Word.

Optional:

  • LaTeX-Unterstützung, zB nach "alpha" suchen, Kleinbuchstaben α und Großbuchstaben Α finden, Latex \alphabzw. \Alpha.

Ich habe es versucht:

  • Win+ ., aber es ist zu sehr auf Emojis fokussiert
  • integriertes Windows-Tool charmap, aber es kann nur scrollen. Eine Suche nach beschreibenden Namen ist nicht möglich
  • Microsoft Word-Symboltabelle, aber es kann nur gescrollt werden. Eine Suche nach beschreibenden Namen ist nicht möglich. Zumindest hat es Regionen wie "math".
  • Diese Frage ist fast identisch, aber für Linux. Außerdem brauche ich nicht unbedingt LaTeX-Unterstützung, obwohl es wirklich schön wäre.
  • Lintalist wie hier vorgeschlagen , aber es macht zu viel. Ich bevorzuge ein dediziertes Tool.
  • die R12A-Unicode-Picker sind alle online

Antworten (1)

Dies ist ein einfaches PowerShell-Skript und keine vollwertige App, aber es erfüllt die meisten Ihrer Anforderungen

Beispiel für eine GUI-Ausgabe:

Select-UniChar "math.*fett.*kursiv" |  Out-GridView-GUI-Ergebnis

Beispielkonsolenausgabe:

PS D:\Unicode>  Select-UniChar "cross.*mark|check" | Select-Object-First 8

Zeichenbezeichnung Name
--------- ----------- ----
⍻ U+237B KEIN HÄKCHEN
⑇ U+2447 OCR SCHECKBETRAG
☑ U+2611 WAHLKASTEN MIT SCHECK
✅ U+2705 WEISSES SCHWERES HÄKCHEN
✓ U+2713 HÄKCHEN
✔ U+2714 SCHWERES HÄKCHEN
❌ U+274C KREUZMARKE
❎ U+274E NEGATIV QUADRATISCHES KREUZ

PS D:\Unicode>  Select-UniChar "alpha" | Select-Object-First 8

Zeichenbezeichnung Name
--------- ----------- ----
ɑ U+0251 Lateinischer Kleinbuchstabe ALPHA
ɒ U+0252 LATEINISCHER KLEINBUCHSTABE WURDE ALPHA
Ά U+0386 GRIECHISCHER GROSSBUCHSTABE ALPHA MIT TONOS
Α U+0391 GRIECHISCHER GROSSBUCHSTABE ALPHA
ά U+03AC GRIECHISCHES KLEINBUCHSTABEN ALPHA MIT TONOS
α U+03B1 GRIECHISCHER KLEINBUCHSTABE ALPHA
ᵅ U+1D45 MODIFIERBUCHSTABE KLEINES ALPHA
ᶐ U+1D90 LATEINISCHER KLEINBUCHSTABE ALPHA MIT RETROFLEXHAKEN

Wie es funktioniert

  1. Führen Sie in PowerShell aus, explorer (Get-ChildItem $PROFILE).Directoryum den Profilordner zu öffnen

  2. Laden Sie die neueste Version UnicodeData.txtaus der Unicode-Datenbank herunter und speichern Sie sie im obigen Ordner

  3. Führen Sie Notepad $PROFILEdie folgenden Zeilen aus und fügen Sie sie am Ende hinzu

    function Select-UniChar([string]$pattern) {
        Select-String $pattern .\UnicodeData.txt | ForEach-Object {
            $start = $_.Line.IndexOf(';')
            $end = $_.Line.IndexOf(';', $start + 1)
            $codepoint = $_.Line.Substring(0, $start)
    
            [PSCustomObject]@{
                Character = [char]::ConvertFromUtf32([uint32]"0x$codepoint")
                Designation = "U+" + $codepoint
                Name = $_.Line.Substring($start + 1, $end - $start - 1)
            }
        }
    }
    
  4. Jetzt können Sie jedes Mal, wenn Sie PowerShell öffnen, die Funktion verwenden Select-UniChar, um die Zeichen zu finden. Zum BeispielSelect-UniChar "dash"

    Sie können ausführen . $profile, um das aktualisierte Profil zu beziehen , um den neuen Code sofort in der aktuellen Shell verfügbar zu machen

Die Funktion empfängt eine Regex , sodass Sie für die erweiterte Suche einige Regex-Kenntnisse benötigen, aber es ist trivial, das Skript so zu ändern, dass es eine Wildcard-Übereinstimmung oder eine einfache Textübereinstimmung durchführt

Wenn Sie eine GUI-Ansicht zum Scrollen, Filtern usw. haben möchten, übergeben Sie die Ausgabe Out-GridViewbeispielsweise an

Select-UniChar 'arrow' | Out-GridView

Beachten Sie, dass viele Zeichen nicht angezeigt werden können, wenn Sie das Standardterminal für PowerShell verwenden. Sie müssen stattdessen Windows Terminal oder ein besseres Terminal verwenden und möglicherweise mehr Schriftarten installieren, um mehr Unicode-Zeichen anzuzeigen. Unabhängig davon, wie es im Terminal angezeigt wird, funktioniert das Kopieren immer noch einwandfrei

Einschränkungen:

  • Die Ausgabe wird nicht nach Nutzungshäufigkeit sortiert, wie wenn Sie Windows+ .oder Windows+ drücken ;, da dies offensichtlich eine viel komplexere Lösung erfordert, die möglicherweise als Dienst ausgeführt werden muss

  • Es funktioniert nicht für Zeichen, die aus mehreren Codepunkten kombiniert werden, z. B. viele Zeichen in komplexen Schriften wie Arabisch oder Indisch oder Emojis wie z

    " ‍💋‍👩🏿👩‍👩‍👦‍👦👨‍👩‍👦‍👦🏳️‍🌈👧🏻🤵🏻

  • Es funktioniert nicht für nicht-englische Begriffe wie die Windows-Emoji-Auswahl (die Suche nach Chaise funktioniert nicht, selbst wenn Sie sich in französischer Sprache befinden)

  • Es führt kein Fuzzy-Matching oder Wortkonjugation durch wie viele moderne intelligente Emoji-Picker oder IMEs

  • Einige Zeichen sehen möglicherweise einfach wie Müll aus, weil es keine verfügbare Schriftart für sie gibt, aber das Kopieren und Einfügen an anderer Stelle funktioniert immer noch einwandfrei


Sie können auch alle Zeichen so drucken

function Select-AllUniChar([string]$pattern) {
    (Select-String $pattern .\UnicodeData.txt | ForEach-Object {
        $codepoint = [uint32]"0x$($_.Line.Substring(0, $_.Line.IndexOf(';')))"
        [char]::ConvertFromUtf32($codepoint)
    } ) -join ', '
}

Demo:

D:\> Select-AllUniChar "gamma"
Ɣ, ɣ, ɤ, ˠ, Ͷ, ͷ, Γ, γ, Ϝ, ϝ, ᴦ, ᵞ, ᵧ, ℽ, ℾ, Ⲅ, ⲅ, 𝚪, 𝛄, 𝛤, 𝛾, 𝜞, 𝜸, 𝝘, 𝝲, 𝞒, 𝞬, 𝟊, 𝟋

Hier ist eine "einfachere" Version, bei der Sie die Unicode-Zeichendaten nicht herunterladen müssen, die jedoch nur für BMP funktioniert

$GetUNameDef = @'
[DllImport("C:/Windows/system32/getuname.dll")]
public static extern int GetUName(
    UInt16 wCharCode,
    [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder lpbuf);
'@
$un = Add-Type -MemberDefinition $GetUNameDef -Name "GetName" `
    -PassThru -Namespace Runtime.InteropServices
$name = [Text.StringBuilder]::new(1024)

class CharInfo {
    [char]$Character
    [string]$Designation 
    [string]$Name
}

function Select-Char([string]$pattern) {
    1..0xFFFF | ForEach-Object { if ($un::GetUName($_, $name) -gt 0) {
        $charName = $name.ToString()
        if ($charName -like "*$pattern*") {
            [CharInfo]@{
                Character = $_
                Designation = "U+{0:X4}" -f $_
                Name = $charName
            }
        }
    } }
}