如何找到特定字形的通用名称?


21

有时,我想知道一个字形的名称。例如,如果我看到了,我可能想知道它是连字符-,破折号,破折号还是减号。有什么方法可以将其复制粘贴到终端以查看其内容吗?

我不确定我的系统是否知道这些字形的通用名称,但是肯定有一些可用的(部分)信息,例如中的/usr/share/X11/locale/en_US.UTF-8/Compose。例如,

<Multi_key> <exclam> <question>         : "‽"   U203D # INTERROBANG

另一个示例字形:🐄

Answers:


30

尝试unicode实用程序:

$ unicode ‽
U+203D INTERROBANG
UTF-8: e2 80 bd  UTF-16BE: 203d  Decimal: &#8253;
‽
Category: Po (Punctuation, Other)
Bidi: ON (Other Neutrals)

uconv来自ICU软件包的实用程序:

$ printf %s ‽ | uconv -x any-name
\N{INTERROBANG}

您还可以通过recode实用程序获取信息:

$ printf %s ‽ | recode ..dump
UCS2   Mne   Description

203D         point exclarrogatif

或使用Perl:

$ printf %s ‽ | perl -CLS -Mcharnames=:full -lne 'print charnames::viacode(ord) for /./g'
INTERROBANG

请注意,这些信息提供了组成该字形的字符的信息,而不是整个字形的信息。例如,对于(结合了重音符号):

$ printf é | uconv -x any-name
\N{LATIN SMALL LETTER E}\N{COMBINING ACUTE ACCENT}

与独立的é字符不同:

$ printf é | uconv -x any-name
\N{LATIN SMALL LETTER E WITH ACUTE}

您可以要求uconv重新组合(对于具有组合形式的组合):

$ printf 'e\u0301b\u0301' | uconv -x '::nfc;::name;'
\N{LATIN SMALL LETTER E WITH ACUTE}\N{LATIN SMALL LETTER B}\N{COMBINING ACUTE ACCENT}

(e'具有组合形式,但b'没有)。


什么unicode啊 我似乎没有安装该文件(也无法在Arch Linux仓库中找到它)。另外,到底是exclarrogatif什么?[编辑:虽然我的系统不是法语,但我在这里也得到了。]
Sparhawk

2
@Sparhawk,exclamatif和的收缩interrogatifrecode是由80年代初期的一个法裔加拿大人撰写的。
斯特凡Chazelas

2
@Sparhawk kassiopeia.juls.savba.sk/~garabik/software/unicode —作为unicodeDebian上的软件包提供,不知道在Arch上打包。
吉尔斯(Gilles)'所以

1
@PaŭloEbermann 为什么printf比echo好?。现在,您已经问过了,您应该阅读完整的答案。会有测试。
terdon

1
@Sparhawk %s就像一个占位符,称为格式说明符(或转换说明符)。printf会将其替换为后续参数,将其视为字符串(例如,与数字相反)(通常对C printf()函数的期望)。请参阅文档(pubs.opengroup.org/onlinepubs/9699919799//basedefs/…)。
muru

5

我知道的最好方法是通过Perl's uniprops。它带有Perl的Unicode::Tussle模块。您可以使用安装

sudo perl -MCPAN -e 'install Unicode::Tussle'

然后,您可以在要测试的任何字形上运行它:

$ uniprops  ‽
U+203D ‹‽› \N{INTERROBANG}
    \pP \p{Po}
    All Any Assigned InPunctuation Punct Is_Punctuation Common Zyyy Po P
       General_Punctuation Gr_Base Grapheme_Base Graph GrBase Other_Punctuation
       Pat_Syn Pattern_Syntax PatSyn Print Punctuation STerm Term
       Terminal_Punctuation Unicode X_POSIX_Graph X_POSIX_Print X_POSIX_Punct

$ uniprops  🐄
U+1F404 ‹🐄› \N{COW}
    \pS \p{So}
    All Any Assigned InMiscPictographs Common Zyyy So S Gr_Base Grapheme_Base Graph
       GrBase Misc_Pictographs Miscellaneous_Symbols_And_Pictographs Other_Symbol
       Print Symbol Unicode X_POSIX_Graph X_POSIX_Print

uniprops在内部也使用charnames :: viacode。
cuonglm

@cuonglm是的,但是Tussle模块包含各种精美的工具,并且uniprops比显式调用该模块容易得多。它不仅提供名称,还提供更多信息。
terdon

5

您可以从charnames模块使用Perl viacode函数

$ printf ‽ | perl -Mcharnames=:full -CLS -nle 'print charnames::viacode(ord)'
INTERROBANG
$ printf 🐄 | perl -Mcharnames=:full -CLS -nle 'print charnames::viacode(ord)'
COW

字符名是在perl v5.6.0中首次发布的


随着Perl 6的将是生产做好准备在这个圣诞节,这是值得在这里提到它,因为当它有Unicode字符最好的支持我所见过。您只需要调用uniname方法/例程:

$ printf ‽ | perl6 -ne 'say .uniname'
INTERROBANG

(结合敏锐的重音符号)和独立é字符都可以为您提供:

# e with combining acute accent
$ printf é | perl6 -ne 'say .uniname'
LATIN SMALL LETTER E WITH ACUTE

# standalone é
$ printf é | perl6 -ne 'say .uniname'
LATIN SMALL LETTER E WITH ACUTE

.uniname是的简写$_.uniname


4

您可以使用unicode,它还会输出一些信息,而不仅仅是名称:

# unicode –
U+2013 EN DASH
UTF-8: e2 80 93  UTF-16BE: 2013  Decimal: &#8211;
–
Category: Pd (Punctuation, Dash)
Bidi: ON (Other Neutrals)

什么unicode啊 我似乎没有安装该文件(也无法在Arch Linux仓库中找到它)。
Sparhawk

3
我的Debian上的@Sparhawk,只是unicode软件包安装的Python脚本。您应该可以通过从Debian repos下载源软件包来获得它。
terdon

1

使用以下命令创建一个bash脚本:

#!/bin/bash
awk -F ":" '{print $2}' /usr/share/X11/locale/en_US.UTF-8/Compose | grep "$1" | awk -F "#" '{print $2}'

例如,根据需要命名它,namechar并赋予它执行权限。

现在,您可以致电:

./namechar @

结果将是:

COMMERCIAL AT

这很好,但是仅匹配一个字符集,而不是完整的unicode。例如,它失败🐄,并为产生重复结果。最后一个可以通过管道固定| sort -u
terdon

是的,@ terdon是正确的。(这就是为什么我在问题中说“ partial”的原因。)此文件仅包含映射到Compose键的字形。
Sparhawk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.