Làm thế nào tôi có thể tìm thấy tên chung cho một glyph cụ thể?


21

Đôi khi, tôi muốn biết tên của một glyph. Ví dụ: nếu tôi thấy , tôi có thể muốn biết nếu đó là dấu gạch nối -, dấu gạch ngang , dấu gạch ngang hoặc biểu tượng dấu trừ . Có cách nào để tôi có thể sao chép-dán cái này vào một thiết bị đầu cuối để xem nó là gì không?

Tôi không chắc hệ thống của mình có biết tên chung cho các glyph này hay không, nhưng chắc chắn có một số thông tin (một phần) có sẵn, chẳng hạn như trong /usr/share/X11/locale/en_US.UTF-8/Compose. Ví dụ,

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

Một ví dụ khác glyph : 🐄.

Câu trả lời:


30

Hãy thử tiện ích unicode :

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

Hoặc uconvtiện ích từ gói ICU :

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

Bạn cũng có thể nhận thông tin qua recodetiện ích:

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

203D         point exclarrogatif

Hoặc với Perl:

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

Lưu ý rằng những người cung cấp thông tin về các ký tự tạo nên glyph đó, chứ không phải trên glyph nói chung. Ví dụ: for (e kết hợp giọng cấp tính):

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

Khác với nhân vật é độc lập:

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

Bạn có thể yêu cầu uconvkết hợp lại những cái đó (đối với những cái có dạng kết hợp):

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

(é có dạng kết hợp, nhưng không phải b́).


unicodegì Tôi dường như không cài đặt nó (và không thể tìm thấy nó trong kho lưu trữ Arch Linux). Ngoài ra, những gì trên trái đất là exclarrogatif? [EDIT: Tôi cũng nhận được điều đó ở đây, mặc dù hệ thống của tôi không phải là tiếng Pháp.]
Sparhawk

2
@Sparhawk, co exclamatifinterrogatif. recodeđược viết bởi một anh chàng người Canada gốc Pháp vào đầu những năm 80.
Stéphane Chazelas

2
@Sparhawk kassiopeia.juls.savba.sk/~garabik/software/unicode - có sẵn dưới dạng unicodegói trên Debian, không có ý tưởng nào về việc đóng gói trên Arch.
Gilles 'SO- ngừng trở nên xấu xa'

1
@ PaŭloEbermann Tại sao printf tốt hơn echo? . Bây giờ bạn đã hỏi, bạn sẽ đọc toàn bộ câu trả lời. Sẽ có một bài kiểm tra.
terdon

1
@Sparhawk %sgiống như một trình giữ chỗ, được gọi là trình xác định định dạng (hoặc trình xác định chuyển đổi). printf sẽ thay thế nó bằng các đối số tiếp theo, coi nó như một chuỗi (ví dụ như trái ngược với một số) (nói chung là cách bạn mong đợi với printf()hàm C ). Xem tài liệu ( pubs.opengroup.org/onlinepub/9699919799//basingefs/ - ).
muru

5

Cách tốt nhất mà tôi biết là thông qua Perl's uniprops. Nó đi kèm với Unicode::Tusslemô-đun của Perl . Bạn có thể cài đặt nó với

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

Sau đó, bạn có thể chạy nó trên bất kỳ glyph nào bạn muốn kiểm tra:

$ 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

unipropscũng sử dụng charnames :: viacode trong nội bộ.
cuonglm

@cuonglm có, nhưng mô-đun Tussle bao gồm tất cả các loại công cụ ưa thích và unipropsrất dễ gõ hơn là gọi mô-đun một cách rõ ràng. Nó cũng cung cấp nhiều thông tin hơn chỉ là tên.
terdon

5

Bạn có thể sử dụng hàm viacode Perl từ mô đun charnames :

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

charnames được phát hành lần đầu tiên với perl v5.6.0


Với Perl 6 sẽ được sản xuất vào ngày Giáng sinh này, thật đáng để đề cập đến nó ở đây, vì nó có hỗ trợ tốt nhất cho các ký tự Unicode mà tôi từng thấy. Bạn chỉ cần gọi phương thức / thói quen uniname :

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

(e kết hợp giọng cấp tính) và éký tự độc lập cả hai cung cấp cho bạn:

# 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

( .uninamelà cách viết tắt của $_.uniname)


4

Bạn có thể sử dụng unicode, cũng cung cấp một số thông tin nhiều hơn chỉ là tên:

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

unicodegì Tôi dường như không cài đặt nó (và không thể tìm thấy nó trong kho lưu trữ Arch Linux).
Sparhawk

3
@Sparhawk trên Debian của tôi, nó chỉ là một tập lệnh Python được unicodegói cài đặt . Bạn sẽ có thể lấy nó bằng cách tải xuống gói nguồn từ repos Debian .
terdon

1

Tạo một tập lệnh bash với điều này:

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

Đặt tên cho nó như bạn muốn, ví dụ, namecharvà cho nó thực thi quyền.

Bây giờ, bạn có thể gọi ví dụ:

./namechar @

và kết quả sẽ là:

COMMERCIAL AT

Điều này là tốt nhưng chỉ phù hợp với một tập hợp các ký tự, không phải là unicode đầy đủ. Ví dụ, nó không thành công 🐄và tạo ra kết quả lặp lại cho . Cái cuối cùng có thể được sửa bằng cách đi qua | sort -u.
terdon

Vâng, @terdon là chính xác. (Đó là lý do tại sao tôi nói "một phần" trong câu hỏi.) Tệp này chỉ chứa glyphs được ánh xạ tới Composekhóa.
Sparhawk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.