Có cách nào trong Java để tôi có thể lấy tất cả các ký tự Unicode của một ngôn ngữ cụ thể (ví dụ như tiếng Bengali hoặc tiếng Ả Rập) không?Lấy các ký tự unicode của một ngôn ngữ trong Java
Trả lời
Lớp java.lang.Character có lớp tĩnh bên trong được gọi là UnicodeBlock. Bạn có thể, ví dụ, có được tiếng Ả Rập Unicode Khối thusly:
Character.UnicodeBlock block = Character.UnicodeBlock.ARABIC;
Bằng cách lặp qua tất cả các nhân vật (hay chính xác hơn, Unicode điểm code) người ta có thể kiểm tra từng tìm Unicode Khối của nó:
public static void main(String[] args) {
Set<Character> arabicChars = findCharactersInUnicodeBlock(Character.UnicodeBlock.ARABIC);
Set<Character> bengaliChars = findCharactersInUnicodeBlock(Character.UnicodeBlock.BENGALI);
}
private static Set<Character> findCharactersInUnicodeBlock(final Character.UnicodeBlock block) {
final Set<Character> chars = new HashSet<Character>();
for (int codePoint = Character.MIN_CODE_POINT; codePoint <= Character.MAX_CODE_POINT; codePoint++) {
if (block == Character.UnicodeBlock.of(codePoint)) {
chars.add((char) codePoint);
}
}
return chars;
}
Tuy nhiên, các khối đó ánh xạ tới * tập lệnh *, không phải ngôn ngữ. Thông thường, cùng một tập lệnh được nhiều ngôn ngữ sử dụng và thường chúng thực sự sử dụng các tập hợp con chồng chéo. –
Điểm tốt, Michael. Tôi đọc "kịch bản" nhưng thực sự OP đã nói "ngôn ngữ". Một điểm mã có thể thuộc nhiều nhất một tập lệnh, nhưng với nhiều ngôn ngữ. –
Cảm ơn sự giúp đỡ. Tôi có một câu hỏi khác, để hiển thị các ký tự trong thành phần xoay (ví dụ Textarea), có cần thiết đặt phông chữ hoặc thành phần xoay có thể hiển thị các ký tự unicode đúng cách nếu các phông chữ phù hợp được cài đặt không? –
Cho đến 1,7, Java không hỗ trợ các tập lệnh bằng Unicode. Mặc dù vậy, Java có hỗ trợ đặc tính Unicode rất sơ sài. Về cơ bản nó bị mắc kẹt tại các hiện thân antemillennial của Unicode. Đây là một vấn đề thực sự. Họ tuyên bố rằng họ sẽ bắt kịp Unicode 6 với JDK7, nhưng tôi chưa thấy bất kỳ bằng chứng nào cho thấy họ sẽ có sự hỗ trợ tài sản hợp lý.
Trong Unicode 6.0, có 1.051 điểm mã mà đếm như tiếng Ả Rập tổng thể, với 1.020 của những người trong Basic Multilingual Plane:
% unichars --bmp '\p{Script=Arabic}' | wc -l
1020
% unichars -a '\p{Script=Arabic}' | wc -l
1051
Lý do mà hoạt động là chương trình unichars
được viết bằng Perl, và Perl luôn có hỗ trợ tài sản Unicode xuất sắc. Tôi đang chạy nó với Unicode 6.0; có phần nào ít hơn trong các phiên bản trước của Unicode. Trên thực tế, 17 ký tự tiếng Ả Rập mới đã được thêm vào cho Unicode 6.0:
% unichars -a '\p{Script=Arabic}' '\p{Age:6.0}' | wc -l
17
Bạn không thể cố gắng sử dụng các khối cho việc này. Các kịch bản khác với các khối. Không phải tất cả các điểm mã trong một khối nhất định đều có cùng một tập lệnh. Quan trọng không kém, bạn thường tìm thấy các ký tự của một kịch bản nhất định nằm rải rác khắp các khối lạ.
Ví dụ, có 18 ký tự không phải Hy Lạp trong khối Hy Lạp:
% unichars '\p{InGreek}' '\P{IsGreek}'ˋ | wc -l
18
Và 13 ký tự không phải tiếng Ả Rập trong khối Ả Rập:
% unichars '\p{InArabic}' '\P{IsArabic}' | wc -l
13
Plus có 4 khối Hy Lạp và 4 (hoặc 5) những tiếng Ả rập:
% uniprops -l | grep 'Block:.*Greek'
Block:Ancient_Greek_Musical_Notation
Block:Ancient_Greek_Numbers
Block:Greek
Block:Greek_And_Coptic
Block:Greek_Extended
% uniprops -l | grep 'Block:.*Arab'
Block:Arabic
Block:Arabic_Presentation_Forms_A
Block:Arabic_Presentation_Forms_B
Block:Arabic_Supplement
Block:Old_South_Arabian
\p{Block:Greek}
và \p{Greek_and_Coptic}
là ali ases, nhưng phần còn lại đều khác biệt.
Nhưng ngay cả khi bạn nhìn vào tất cả các khối đó, bạn sẽ bỏ lỡ một số. Ví dụ:
% unichars '\p{IsGreek}' '[^\p{InAncient_Greek_Musical_Notation}\p{InAncient_Greek_Numbers}\p{InGreek}\p{InGreek_Extended}]'
ᴦ 7462 1D26 GREEK LETTER SMALL CAPITAL GAMMA
ᴧ 7463 1D27 GREEK LETTER SMALL CAPITAL LAMDA
ᴨ 7464 1D28 GREEK LETTER SMALL CAPITAL PI
ᴩ 7465 1D29 GREEK LETTER SMALL CAPITAL RHO
ᴪ 7466 1D2A GREEK LETTER SMALL CAPITAL PSI
ᵝ 7517 1D5D MODIFIER LETTER SMALL BETA
ᵞ 7518 1D5E MODIFIER LETTER SMALL GREEK GAMMA
ᵟ 7519 1D5F MODIFIER LETTER SMALL DELTA
ᵠ 7520 1D60 MODIFIER LETTER SMALL GREEK PHI
ᵡ 7521 1D61 MODIFIER LETTER SMALL CHI
ᵦ 7526 1D66 GREEK SUBSCRIPT SMALL LETTER BETA
ᵧ 7527 1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA
ᵨ 7528 1D68 GREEK SUBSCRIPT SMALL LETTER RHO
ᵩ 7529 1D69 GREEK SUBSCRIPT SMALL LETTER PHI
ᵪ 7530 1D6A GREEK SUBSCRIPT SMALL LETTER CHI
ᶿ 7615 1DBF MODIFIER LETTER SMALL THETA
Ω 8486 2126 OHM SIGN
Xem sự cố?
BTW, bạn sử dụng uniprops
để không chỉ liệt kê tất cả các thuộc tính có thể có. Nó cũng có thể cung cấp cho bạn các tính chất của bất kỳ điểm mã nhất định:
% uniprops -a 1dbf 9e6 NEL Greek:Omicron
U+1DBF <ᶿ> \N{ MODIFIER LETTER SMALL THETA }:
\w \pL \p{L_} \p{Lm}
All Any Alnum Alpha Alphabetic Assigned Greek Is_Greek InPhoneticExtensionsSupplement Case_Ignorable CI Cased Changes_When_NFKC_Casefolded CWKCF L Lm Gr_Base Grapheme_Base Graph GrBase Grek ID_Continue IDC ID_Start IDS Letter L_ Modifier_Letter Lower Lowercase Print Word XID_Continue XIDC XID_Start XIDS
Age:4.1 Bidi_Class:L Bidi_Class=Left_To_Right Bidi_Class:Left_To_Right Bc=L Block:Phonetic_Extensions_Supplement Canonical_Combining_Class:0 Canonical_Combining_Class=Not_Reordered Canonical_Combining_Class:Not_Reordered Ccc=NR Canonical_Combining_Class:NR Decomposition_Type:Non_Canon Decomposition_Type=Non_Canonical
Decomposition_Type:Non_Canonical Dt=NonCanon Decomposition_Type:Sup Decomposition_Type=Super Decomposition_Type:Super Dt=Sup East_Asian_Width=Neutral East_Asian_Width:Neutral Grapheme_Cluster_Break:Other GCB=XX Grapheme_Cluster_Break:XX Grapheme_Cluster_Break=Other Script=Greek Hangul_Syllable_Type:NA
Hangul_Syllable_Type=Not_Applicable Hangul_Syllable_Type:Not_Applicable Hst=NA Joining_Group:No_Joining_Group Jg=NoJoiningGroup Joining_Type:Non_Joining Jt=U Joining_Type:U Joining_Type=Non_Joining Line_Break:AL Line_Break=Alphabetic Line_Break:Alphabetic Lb=AL Numeric_Type:None Nt=None Numeric_Value:NaN Nv=NaN Present_In:4.1
In=4.1 Present_In:5.0 In=5.0 Present_In:5.1 In=5.1 Present_In:5.2 In=5.2 Script:Greek Sc=Grek Script:Grek Sentence_Break:LO Sentence_Break=Lower Sentence_Break:Lower SB=LO Word_Break:ALetter WB=LE Word_Break:LE Word_Break=ALetter
U+09E6 <০> \N{ BENGALI DIGIT ZERO }:
\w \d \pN \p{Nd}
All Any Alnum Assigned Beng Bengali InBengali Is_Bengali Decimal_Number Digit Nd N Gr_Base Grapheme_Base Graph GrBase ID_Continue IDC Number Print Word XID_Continue XIDC
Age:1.1 Script=Bengali Block=Bengali Bidi_Class:L Bidi_Class=Left_To_Right Bidi_Class:Left_To_Right Bc=L Block:Bengali Canonical_Combining_Class:0 Canonical_Combining_Class=Not_Reordered Canonical_Combining_Class:Not_Reordered Ccc=NR Canonical_Combining_Class:NR Decomposition_Type:None Dt=None East_Asian_Width=Neutral
East_Asian_Width:Neutral Grapheme_Cluster_Break:Other GCB=XX Grapheme_Cluster_Break:XX Grapheme_Cluster_Break=Other Hangul_Syllable_Type:NA Hangul_Syllable_Type=Not_Applicable Hangul_Syllable_Type:Not_Applicable Hst=NA Joining_Group:No_Joining_Group Jg=NoJoiningGroup Joining_Type:Non_Joining Jt=U Joining_Type:U
Joining_Type=Non_Joining Line_Break:NU Line_Break=Numeric Line_Break:Numeric Lb=NU Numeric_Type:De Numeric_Type=Decimal Numeric_Type:Decimal Nt=De Numeric_Value:0 Nv=0 Present_In:1.1 Age=1.1 In=1.1 Present_In:2.0 In=2.0 Present_In:2.1 In=2.1 Present_In:3.0 In=3.0 Present_In:3.1 In=3.1 Present_In:3.2 In=3.2 Present_In:4.0 In=4.0
Present_In:4.1 In=4.1 Present_In:5.0 In=5.0 Present_In:5.1 In=5.1 Present_In:5.2 In=5.2 Script:Beng Script:Bengali Sc=Beng Sentence_Break:NU Sentence_Break=Numeric Sentence_Break:Numeric SB=NU Word_Break:NU Word_Break=Numeric Word_Break:Numeric WB=NU
U+0085 <U+0085> \N{ NEXT LINE (NEL) }:
\s \v \R \pC \p{Cc}
All Any Assigned InLatin1 C Other Cc Cntrl Common Zyyy Control Pat_WS Pattern_White_Space PatWS Space SpacePerl VertSpace White_Space WSpace
Age:1.1 Bidi_Class:B Bidi_Class=Paragraph_Separator Bidi_Class:Paragraph_Separator Bc=B Block:Latin_1 Block=Latin_1_Supplement Block:Latin_1_Supplement Blk=Latin1 Canonical_Combining_Class:0 Canonical_Combining_Class=Not_Reordered Canonical_Combining_Class:Not_Reordered Ccc=NR Canonical_Combining_Class:NR Script=Common
Decomposition_Type:None Dt=None East_Asian_Width=Neutral East_Asian_Width:Neutral Grapheme_Cluster_Break:CN Grapheme_Cluster_Break=Control Grapheme_Cluster_Break:Control GCB=CN Hangul_Syllable_Type:NA Hangul_Syllable_Type=Not_Applicable Hangul_Syllable_Type:Not_Applicable Hst=NA Joining_Group:No_Joining_Group Jg=NoJoiningGroup
Joining_Type:Non_Joining Jt=U Joining_Type:U Joining_Type=Non_Joining Line_Break:Next_Line Lb=NL Line_Break:NL Line_Break=Next_Line Numeric_Type:None Nt=None Numeric_Value:NaN Nv=NaN Present_In:1.1 Age=1.1 In=1.1 Present_In:2.0 In=2.0 Present_In:2.1 In=2.1 Present_In:3.0 In=3.0 Present_In:3.1 In=3.1 Present_In:3.2 In=3.2
Present_In:4.0 In=4.0 Present_In:4.1 In=4.1 Present_In:5.0 In=5.0 Present_In:5.1 In=5.1 Present_In:5.2 In=5.2 Script:Common Sc=Zyyy Script:Zyyy Sentence_Break:SE Sentence_Break=Sep Sentence_Break:Sep SB=SE Word_Break:Newline WB=NL Word_Break:NL Word_Break=Newline
U+039F <Ο> \N{ GREEK CAPITAL LETTER OMICRON }:
\w \pL \p{LC} \p{L_} \p{L&} \p{Lu}
All Any Alnum Alpha Alphabetic Assigned Greek Is_Greek InGreek Cased Cased_Letter LC Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Lu L Gr_Base Grapheme_Base Graph GrBase Grek Greek_And_Coptic ID_Continue IDC ID_Start IDS Letter L_ Uppercase_Letter Print Upper
Uppercase Word XID_Continue XIDC XID_Start XIDS
Age:1.1 Bidi_Class:L Bidi_Class=Left_To_Right Bidi_Class:Left_To_Right Bc=L Block:Greek Block=Greek_And_Coptic Block:Greek_And_Coptic Blk=Greek Canonical_Combining_Class:0 Canonical_Combining_Class=Not_Reordered Canonical_Combining_Class:Not_Reordered Ccc=NR Canonical_Combining_Class:NR Decomposition_Type:None Dt=None
East_Asian_Width:A East_Asian_Width=Ambiguous East_Asian_Width:Ambiguous Ea=A Grapheme_Cluster_Break:Other GCB=XX Grapheme_Cluster_Break:XX Grapheme_Cluster_Break=Other Script=Greek Hangul_Syllable_Type:NA Hangul_Syllable_Type=Not_Applicable Hangul_Syllable_Type:Not_Applicable Hst=NA Joining_Group:No_Joining_Group Jg=NoJoiningGroup
Joining_Type:Non_Joining Jt=U Joining_Type:U Joining_Type=Non_Joining Line_Break:AL Line_Break=Alphabetic Line_Break:Alphabetic Lb=AL Numeric_Type:None Nt=None Numeric_Value:NaN Nv=NaN Present_In:1.1 Age=1.1 In=1.1 Present_In:2.0 In=2.0 Present_In:2.1 In=2.1 Present_In:3.0 In=3.0 Present_In:3.1 In=3.1 Present_In:3.2 In=3.2
Present_In:4.0 In=4.0 Present_In:4.1 In=4.1 Present_In:5.0 In=5.0 Present_In:5.1 In=5.1 Present_In:5.2 In=5.2 Script:Greek Sc=Grek Script:Grek Sentence_Break:UP Sentence_Break=Upper Sentence_Break:Upper SB=UP Word_Break:ALetter WB=LE Word_Break:LE Word_Break=ALetter
Nếu bạn tìm thấy chúng hữu ích, bạn có thể tải về mã nguồn cho các chương trình uniprops và unichars. Có một phần ba trong nhóm, uninames. Tất cả đi kèm với hướng dẫn và ví dụ.
Ngay cả khi một số thuộc tính đó không có sẵn trực tiếp trong Java, bạn có thể sử dụng Perl để tạo mã Java nếu bạn muốn; Tôi làm tất cả thời gian bản thân mình. :)
- 1. Java: Cách lấy tên Unicode của một ký tự (hoặc loại thể loại của nó)?
- 2. Khối Unicode của một ký tự trong python
- 3. Ký tự đối sánh regex Java bên ngoài Máy bay đa ngôn ngữ cơ bản
- 4. Mẹo lập trình với ngôn ngữ/ký tự tiếng Nhật
- 5. Java ký tự loại bỏ unicode
- 6. Phát hiện ngôn ngữ từ chuỗi unicode trong C++
- 7. Trình tạo ngôn ngữ tự nhiên cho các ngày (Java)
- 8. Các ký tự Unicode Base64ing
- 9. Tách các ký tự ligature Unicode
- 10. Nhận giá trị unicode của một ký tự
- 11. Vị trí của "đầu" trong một ký tự Arrow-Unicode
- 12. Lấy ngôn ngữ của người dùng trong android
- 13. Cách lấy tên ngôn ngữ cho một ngôn ngữ cụ thể trong linux
- 14. Giải pháp xử lý ngôn ngữ tự nhiên trong Java?
- 15. Biểu thức chính quy của Java không nhận dạng các ký tự từ các ngôn ngữ khác dưới dạng ký tự từ (ví dụ: \ w)
- 16. Ký tự Unicode chuỗi
- 17. Vẽ các ký tự Unicode trên iPhone
- 18. Ký tự Unicode trong bảng Sql
- 19. Javascript Regex + Unicode Diacritic Kết hợp các ký tự '
- 20. Python và Java để xử lý ngôn ngữ tự nhiên
- 21. Tạo ngôn ngữ tự nhiên trong PHP
- 22. Regex cho các ký tự từ trong bất kỳ ngôn ngữ nào
- 23. Các ký tự giống hệt nhau trong Unicode
- 24. Phông chữ được đề xuất để hiển thị các ký tự unicode?
- 25. Thay thế các ký tự unicode trong PostgreSQL
- 26. Dịch mã byte Java sang các ngôn ngữ lập trình và ngôn ngữ lập trình khác
- 27. Các ký tự Unicode trong Ruby 1.9.3 IRB với RVM
- 28. Ký tự Unicode cao nhất?
- 29. Làm cách nào để tìm loại ký tự hai chiều của ký tự Unicode trong C#?
- 30. Fix Python Unicode Lỗi gây ra bởi ngôn ngữ khác
Bạn có nghĩa là ngôn ngữ hoặc tập lệnh không? Nếu bạn có nghĩa là "kịch bản tiếng Ả Rập" bao gồm cả được sử dụng bởi Farsi, sau đó có nó là có thể. Nếu bạn có nghĩa là ngôn ngữ, sau đó tôi không nghĩ rằng Unicode hỗ trợ thông tin đó. –