Làm cách nào để in tên glyph Unicode cho chuỗi đầu vào?


12

Tôi muốn có thể chạy

unicode-names 'abç'

và xem tên ký tự Unicode tương ứng:

LATIN SMALL LETTER A
LATIN SMALL LETTER B
LATIN SMALL LETTER C WITH CEDILLA

In một chuỗi dưới dạng một loạt các tên glyph Unicode sẽ hữu ích trong một số trường hợp:

  • Phân biệt các ký tự dễ nhầm lẫn như "i" và "í".
  • Giải thích những gì một chuỗi ký tự thực sự chứa (ví dụ các ký tự không có chiều rộng không thể in hoặc không được gán, không có chiều rộng).

Câu trả lời:


14

Các uniutils gói có chương trình uniname.

$ echo -n …—|uniname
character  byte       UTF-32   encoded as     glyph   name
    0          0  002026   E2 80 A6       …      HORIZONTAL ELLIPSIS
    1          3  002014   E2 80 94       —      EM DASH

1
Để có đầu ra tối thiểu chỉ có tên, hãy sử dụng các tùy chọn sau:echo -n …— | uniname -bcegpu
l0b0

8

Tôi không biết một cách hay để kiểm tra điều này bash, nhưng Python có cơ sở dữ liệu Unicode tích hợp mà bạn có thể sử dụng như trong một tập lệnh như thế này:

#!/usr/bin/env python
import sys, unicodedata
for ch in sys.stdin.read().decode('utf-8'):
  try:
    print unicodedata.name(ch)
  except ValueError:
    print 'codepoint ', ord(ch)

Bạn có thể sử dụng tập lệnh này như thế này (giả sử bạn đã gọi nó unicode-names):

$ echo 'abc©áοπρσ' | unicode-names
LATIN SMALL LETTER A
LATIN SMALL LETTER B
LATIN SMALL LETTER C
COPYRIGHT SIGN
LATIN SMALL LETTER A WITH ACUTE
GREEK SMALL LETTER OMICRON
GREEK SMALL LETTER PI
GREEK SMALL LETTER RHO
GREEK SMALL LETTER SIGMA
codepoint 10

Cơ sở dữ liệu đưa ra một ValueErrorngoại lệ cho bất kỳ ký tự nào mà nó không biết, vì vậy chúng tôi in các điểm mã của chúng ở dạng thập phân (thường là các ký tự không thể in được).

Hãy cẩn thận: tập lệnh giả định thiết bị đầu cuối của bạn được mã hóa UTF-8. Nếu không, bạn nên thay đổi đối số của decode()phương thức. Python hỗ trợ rất nhiều lựa chọn mã hóa, bạn chắc chắn sẽ ở đó.


1
Tốt hơn - sử dụng sys.getdefaultencoding().
Chris Down
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.