2010-09-18 42 views
35

Tôi mới học Unicode và không biết mình phải học bao nhiêu dựa trên nền ASCII, nhưng tôi đang đọc the C# spec on rules for identifiers để xác định ký tự nào được phép trong phạm vi Azure Table (trực tiếp dựa trên thông số C#).Tôi có thể lấy danh sách các ký tự Unicode theo lớp ở đâu?

Tôi có thể tìm thấy một danh sách các ký tự Unicode đâu mà rơi vào các loại này:

  • letter-character: Một ký tự Unicode của các tầng lớp Lu, Ll, Lt, Lm, Lo, hoặc Nl
  • combining-character: Một ký tự Unicode của các tầng lớp Mn hoặc Mc
  • decimal-digit-character: Một ký tự Unicode của lớp Nd
  • connecting-character: Một ký tự Unicode của lớp Pc
  • formatting-character: Một ký tự Unicode của lớp Cf
+1

@Hans Passant, regex đó chỉ dành cho tên bảng, không phải cho số nhận dạng được sử dụng trong tên thuộc tính như PartitionKey và RowKey – LamonteCristo

+6

@Hans: Nhận xét sai. A-Za-Z bao gồm 52 ký tự Unicode trong số hàng nghìn ký tự được phép. – Timwi

+0

@Timwi - oh, tôi không biết điều đó. Tôi trích dẫn từ các tài liệu của khóa học. –

Trả lời

33

Bạn có thể lấy thông tin này trong một thời trang tự động từ tập tin chính thức dữ liệu Unicode, UnicodeData.txt, được xuất bản ở đây:

Đây là một tập tin với các giá trị dấu chấm phẩy trong mỗi dòng. Cột thứ ba cho bạn biết lớp ký tự của mỗi ký tự.

Lợi ích của việc này là bạn có thể lấy tên nhân vật cho mỗi nhân vật, do đó bạn có ý tưởng tốt hơn là chỉ nhìn vào chính nhân vật đó (ví dụ bạn biết ბ là gì không? Đúng vậy, Trong tiếng Georgia, :-))

+0

Rất tuyệt! Tôi thậm chí có thể tìm kiếm các ký tự trong mỗi danh mục như thế này "; Cf;" – LamonteCristo

+1

... Tôi chưa từng nghĩ rằng Unicode là phức tạp này. Có vẻ như tôi có rất nhiều việc phải làm. – LamonteCristo

+0

điều này thật đáng sợ. Nó nói trong tập tin văn bản dấu "#" là một thể loại "Sc", MSDN nói [tương tự] (https://msdn.microsoft.com/en-us/library/system.globalization.unicodecategory (v = vs .110) .aspx) nhưng trên thực tế, một "Dấu câu khác" tức là "Ps". Lỗi trong .net 4.5.1? – Marcus

34

FileFormat.info có một danh sách các ký tự Unicode theo thể loại:

http://www.fileformat.info/info/unicode/category/index.htm

+4

+1 - Tùy chọn này hiển thị tốt nhất cho duyệt web thông thường – LamonteCristo

+5

Trang web đó không phân tích cú pháp UnicodeData.txt ngay. Nó không nhận ra phạm vi và không hiểu Cn. Vì vậy, các loại Co, Cs, Lo và Cn có số lượng sai. Khác hơn đó là một trang web mát mẻ. –

12

Bạn có thể, tất nhiên, sử dụng LINQ:

var charInfo = Enumerable.Range(0, 0x110000) 
         .Where(x => x < 0x00d800 || x > 0x00dfff) 
         .Select(char.ConvertFromUtf32) 
         .GroupBy(s => char.GetUnicodeCategory(s, 0)) 
         .ToDictionary(g => g.Key); 

foreach (var ch in charInfo[UnicodeCategory.LowercaseLetter]) 
{ 
    Console.Write(ch); 
} 

Bạn có thể tìm danh sách các loại Unicode và tên viết tắt của chúng trên MSDN, ví dụ: "Ll" viết tắt là UnicodeCategory.LowercaseLetter.

+0

Làm thế nào bạn biết để mã cứng những hằng số trong? Họ đến từ đâu? – LamonteCristo

+2

@ MakerOfThings7: Từ tài liệu của [Char.ConvertFromUtf32] (http://msdn.microsoft.com/en-us/library/system.char.convertfromutf32.aspx). Nó ném một ngoại lệ nếu đối số của nó "không phải là một điểm mã Unicode 21 bit hợp lệ từ U + 0 đến U + 10FFFF, không bao gồm phạm vi cặp thay thế từ U + D800 đến U + DFFF." – dtb

+0

LINQ thật thú vị. 1 kể từ khi tôi sẽ học một cái gì đó từ này. Ngoài ra tôi nghĩ không phải tất cả ký tự sẽ hiển thị trong "Console.write". Có lẽ nó tốt hơn cho tôi để xuất các mã này trong một trang HTML cho IE để render? – LamonteCristo

2

Trong ANTLR lexer bạn có thể tìm thấy bộ ký tự Unicode (LU, LL, LT, LM và LO) ở định dạng phạm vi thuận tiện.

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