按名称输入 Unicode 字符

按名称输入 Unicode 字符

有时我想输入 Unicode 字符(长划线、引号、有时是希腊字母、上标等)。它完毕使用字符代码,但随后需要查找/记住它们,这很累人。

有没有办法在 Windows 中通过名称输入字符?

日语 IME 有类似的东西 ― 例如hoshi(日语中的“星星”) 转换为“☆” ― 但对于 Unicode 的一个非常有限的子集。

答案1

按名称输入 Unicode或多或少解决了问题。

答案2

你可以试试尤尼科达。它有一个搜索框,您可以在其中按名称输入要查找的角色。上次更新于 2022 年 1 月。

或者尝试所有 Unicode可以从 Microsoft Store 安装。上次更新于 2017 年

所有可用 Unicode 字符(包括表情符号)的概览。将选定的字符转换为所需格式(适用于开发人员)或将字符复制到剪贴板。从所有 Unicode 范围的概览导航到字符。在超过 54,000 个字符中,输入搜索词即可找到所需的字符。

尝试BabelMap(适用于 Windows 的 Unicode 字符映射)。似乎更新了最新的表情符号。上次更新时间为 2021 年 9 月(撰写此答案时)。

BabelMap 是一款适用于 Windows 的免费字符映射应用程序,它允许您浏览近 144,000 个字符的整个 Unicode 字符集,或按名称或代码点搜索特定字符。然后可以将字符复制到剪贴板以供任何支持 Unicode 的应用程序使用。

答案3

如果你需要与所有角色包括骨形态发生蛋白(即高于 U+FFFF 的代码点),或者你想要最新的 Unicode 版本然后跳过这一步,查看下一节中更完整的版本

否则,可以使用下面的 PowerShell 脚本,它不需要任何外部资源,因为它使用getuname.dllSystem32 中可用的资源

$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)

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

之后你可以调用Select-Char "pattern"并复制所需的字符

示例输出:

PS D:\> 选择字符“破折号”| 选择对象-第一个 4
角色名称
--------- ----------- ----
        ‒ U+2012 图形破折号
        – U+2013 短划线
        — U+2014 长划线
        ⁓ U+2053 摆动破折号
PS D:\> 选择字符“alpha”| 选择-First 6
角色名称
--------- ----------- ----
        ɑ U+0251 拉丁小写字母 Alpha
        ɒ U+0252 拉丁小写字母转为字母
        Ά U+0386 带音调的希腊大写字母 Alpha
        Α U+0391 希腊大写字母 Alpha
        ά U+03AC 带音调的希腊小写字母 Alpha
        α U+03B1 希腊小写字母 Alpha

您还可以通过管道将输出传输到外网格视图例如,获得可过滤的 GUI Select-Char 'arrow' | Out-GridView。示例输出:

Out-GridView 示例输出

不过我不知道getuname.dll使用的是哪个 Unicode 版本。另请注意,这有很多限制:

  • 输出未按使用频率排序(这需要更复杂的解决方案,可能需要作为服务运行)
  • 它不适用于非英语术语,如 Windows 表情符号选择器(查找躺椅即使您身处法语区域也无法正常工作)
  • 它不做模糊匹配或像许多现代智能表情符号选择器一样进行词语变位,或输入法
  • 有些字符可能看起来像垃圾,因为没有可用的字体,但复制它们然后粘贴到其他地方仍然可以完美地工作

如果你需要更完整的解决方案,那么首先你需要下载最新的官方Unicode 数据库UnicodeData.txt之后,您可以使用以下 PowerShell 函数

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

演示:

D:\> 选择-AllUniChar“gamma”
Ɣ, ɣ, ɤ, ˠ, Ͷ, ͷ, Γ, γ, Ϝ, ϝ, ᴦ, ᵞ, ᵧ, ℽ, ℾ, Ⲅ, ⲅ,

答案4

我不能保证,但我认为BabelPad可能有这样的功能。如果您使用的是 Windows,并且不介意将自己限制在这个特定的编辑器上(我认为您想要一个更通用的解决方案),那么这个可能适合您。

相关内容