2010-01-24 49 views

Trả lời

11

Bạn có thể xây dựng liên tục của riêng bạn Unicode chữ hoa và chữ thường với:

import unicodedata as ud 
all_unicode = ''.join(unichr(i) for i in xrange(65536)) 
unicode_letters = ''.join(c for c in all_unicode 
          if ud.category(c)=='Lu' or ud.category(c)=='Ll') 

Điều này làm cho một chuỗi ký tự dài 2153 (hẹp Unicode Python xây dựng). Đối với mã như letter in unicode_letters nó sẽ là nhanh hơn để sử dụng một thiết lập thay vì:

unicode_letters = set(unicode_letters) 
+0

Câu trả lời hay cho câu hỏi như tôi đã hỏi.Tuy nhiên, tôi tìm thấy một giải pháp phù hợp hơn với nhu cầu của tôi (xem câu trả lời của riêng tôi dưới đây) – emm

+0

'ud.category.c in ('Lu', 'Ll')' – jsbueno

0

Đó sẽ là một hằng số khá lớn. Unicode hiện có hơn 100.000 ký tự khác nhau. Vì vậy, câu trả lời là không.

Câu hỏi đặt ra là tại sao bạn cần? Có thể có một số cách khác để giải quyết bất cứ vấn đề gì của bạn là với mô-đun unicodedata, ví dụ.

Cập nhật: Bạn có thể tải xuống các tệp có tất cả các tên datapoint unicode và thông tin khác từ ftp://ftp.unicode.org/ và tải nhiều nội dung thú vị với điều đó.

6

Không có chuỗi nào, nhưng bạn có thể kiểm tra xem ký tự có phải là một chữ cái sử dụng mô-đun unicodedata, cụ thể là chức năng category() của nó.

>>> unicodedata.category(u'a') 
'Ll' 
>>> unicodedata.category(u'A') 
'Lu' 
>>> unicodedata.category(u'5') 
'Nd' 
>>> unicodedata.category(u'ф') # Cyrillic f. 
'Ll' 
>>> unicodedata.category(u'٢') # Arabic-indic numeral for 2. 
'Nd' 

Ll có nghĩa là "chữ cái, chữ thường". Lu có nghĩa là "chữ cái, chữ hoa". Nd có nghĩa là "số, chữ số".

+1

Chỉ cần để làm cho câu trả lời hoàn chỉnh, đây là một danh sách của tất cả các loại Unicode: http://www.fileformat.info/info/unicode/ category/index.htm –

-1

Như đã đề cập trong các câu trả lời trước, chuỗi thực sự là cách quá dài. Vì vậy, bạn phải nhắm mục tiêu (a) (các) ngôn ngữ cụ thể.
[EDIT: Tôi nhận ra đó là trường hợp cho mục đích sử dụng ban đầu của tôi, và đối với hầu hết các công dụng, tôi đoán vậy. Tuy nhiên, trong khi chờ đợi, Mark Tolonen đã đưa ra một câu trả lời tốt cho câu hỏi như nó đã được hỏi, vì vậy tôi đã chọn câu trả lời của mình, mặc dù tôi đã sử dụng các giải pháp sau đây]

này có thể dễ dàng thực hiện với sự "Locale" mô-đun:

import locale 
import string 
code = 'fr_FR' ## Do NOT specify encoding (see below) 
locale.setlocale(locale.LC_CTYPE, code) 
encoding = locale.getlocale()[1] 
letters = string.letters.decode(encoding) 

bằng "chữ cái" là chuỗi unicode dài 117 ký tự.

Rõ ràng, string.letters phụ thuộc vào mã hóa mặc định cho mã ngôn ngữ đã chọn, thay vì trên chính ngôn ngữ đó. Đặt ngôn ngữ thành fr_FR hoặc de_DE hoặc es_ES sẽ cập nhật chuỗi ký tự thành cùng một giá trị (vì tất cả chúng đều được mã hóa theo ISO8859-1 theo mặc định).

Nếu bạn thêm mã hóa vào mã ngôn ngữ (de_DE.UTF-8), mã hóa mặc định sẽ được sử dụng thay cho chuỗi. Điều đó sẽ gây ra một UnicodeDecodeError nếu bạn sử dụng phần còn lại của mã trên.

Các vấn đề liên quan