Gibt es eine Möglichkeit in Java, so dass ich alle Unicode-Zeichen einer bestimmten Sprache (zum Beispiel Bengali oder Arabisch) erhalten kann?Erhalte Unicode-Zeichen einer Sprache in Java
Antwort
Die Klasse java.lang.Character hat eine innere statische Klasse namens UnicodeBlock. Sie können zum Beispiel erhalten die arabische Unicode-Block thusly:
Character.UnicodeBlock block = Character.UnicodeBlock.ARABIC;
Durch alle Zeichen iterieren (oder genauer gesagt, Unicode-Codepunkte) kann jeder zu überprüfen, um seine Unicode-Block zu finden:
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;
}
Diese Blöcke werden jedoch * Skripten * zugeordnet, nicht Sprachen. Häufig wird dasselbe Skript von mehreren Sprachen verwendet, und häufig verwenden sie sogar überlappende Teilmengen. –
Guter Punkt, Michael. Ich las "Skript", aber das OP erklärte "Sprache". Ein Codepunkt kann höchstens zu einem Skript, aber zu mehreren Sprachen gehören. –
Danke für die Hilfe. Ich habe eine andere Frage, um die Zeichen in einer Swing-Komponente (zum Beispiel Textarea) anzuzeigen, ist es notwendig, die Schriftart oder die Swing-Komponente kann die Unicode-Zeichen richtig angezeigt, wenn geeignete Schriftarten installiert sind? –
Bis 1.7 unterstützt Java keine Skripte in Unicode. Java unterstützt jedoch sehr unklare Unicode-Eigenschaften. Es steckt im Grunde genommen in der Inkarnation von Unicode. Dies ist ein echtes Problem. Sie behaupten, dass sie mit JDK7 Unicode 6 erreichen werden, aber ich habe noch keine Beweise gesehen, dass sie eine angemessene Eigenschaft unterstützen.
In Unicode 6.0 gibt 1.051 Codepunkte sind, die insgesamt als Arabisch zählen, mit 1.020 von denen in der Basic Multilingual Plane:
% unichars --bmp '\p{Script=Arabic}' | wc -l
1020
% unichars -a '\p{Script=Arabic}' | wc -l
1051
Der Grund, dass in Perl geschrieben ist, dass das unichars
Programm funktioniert, und Perl hatte immer ausgezeichnete Unicode-Eigenschaft Unterstützung. Ich führe das gegen Unicode 6.0; In früheren Versionen von Unicode gab es etwas weniger. In der Tat wurden 17 neue arabische Zeichen für Unicode 6.0 hinzugefügt:
Sie können einfach nicht versuchen, Blöcke dafür zu verwenden. Skripte unterscheiden sich von Blöcken. Nicht alle Codepunkte in einem bestimmten Block sind vom selben Skript. Genauso wichtig ist, dass Sie oft Buchstaben eines bestimmten Skripts in seltsamen Blöcken verstreut finden.
Zum Beispiel gibt es 18 nicht-griechische Buchstaben im griechischen Block:
% unichars '\p{InGreek}' '\P{IsGreek}'ˋ | wc -l
18
und 13 nicht-arabische Zeichen in dem arabischen Block:
% unichars '\p{InArabic}' '\P{IsArabic}' | wc -l
13
Plus sind es 4 griechische Blöcke und 4 (oder 5) Arabisch ein:
% 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}
und \p{Greek_and_Coptic}
sind ali ase, aber der Rest ist alles verschieden.
Aber selbst wenn Sie all diese Blöcke betrachten, werden Sie einige vermissen. Zum Beispiel:
% 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
Sehen Sie das Problem?
BTW, Sie verwenden uniprops
für mehr als nur Auflistung aller möglichen Eigenschaften. Es kann Ihnen auch die Eigenschaften eines gegebenen Codepunkt:
% 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
Wenn Sie sie nützlich finden, können Sie die Quelle für die uniprops und unichars Programme herunterladen. Es gibt eine dritte in der Gruppe, uninames. Alle kommen mit Anweisungen und Beispielen.
Auch wenn einige dieser Eigenschaften in Java noch nicht direkt verfügbar sind, ist es in Ordnung, Perl zu verwenden, um Java-Code zu generieren, wenn Sie möchten; Ich mache es die ganze Zeit selbst. :)
- 1. Erhalte Instanz einer reflektierten Klasse in Java
- 2. Sprache in einer Sprache zu einer anderen Sprache
- 3. OS Sprache in Java bekommen
- 4. Java: Erhalte einen Prozess mit einer pid
- 5. Java-Sprache Importbefehl Nutzung
- 6. Java 7 Sprache Rückwärtskompatibilität
- 7. Wie erhalte ich die Gesamtzeit einer Audiodatei in Java?
- 8. Wie erhalte ich ein Objekt aus einer Liste in einem bestimmten Index in Racket-Sprache?
- 9. Definieren einer Sprache in EBNF
- 10. Erhalte Datei Schöpfer/Besitzer Attribute in Java
- 11. Java: Erhalte Dateierweiterung mit "." in seinem Namen
- 12. java user.home in der lokalen Sprache zurückzukehren
- 13. Kontexthilfe für Java API & Sprache in NetBeans
- 14. statische Methoden machen Java zu einer Pseudo-funktionalen Sprache?
- 15. Interpretierte Sprache in Java und Aufrufe von Java-Methoden
- 16. Erhalte eigene IP in Java Servlets
- 17. Erhalte den Zielverzeichnispfad in Maven (Java)
- 18. Wie erhalte ich ein Dateisymbol in Java?
- 19. Erhalte die Dauer einer Audiodatei
- 20. Wie erhalte ich die letzte Modifikationszeit einer Java-Ressource?
- 21. Übersetzen in einer bestimmten Sprache in Laravel
- 22. Gibt es einen Java-Parser für die Java-Sprache?
- 23. Parsing einer einfachen Sprache für Titelformatierung
- 24. η-Erweiterung in einer reinen funktionalen Sprache
- 25. UNIX Shell in einer vernünftigen Sprache geschrieben?
- 26. Liste Alle Länder in einer bestimmten Sprache
- 27. GetDate-Funktion in einer anderen Sprache?
- 28. Garbage Collection in einer C-kompilierten Sprache
- 29. Monat in einer anderen Sprache anzeigen
- 30. Wie erhalte ich Benutzereingaben in Apples Swift-Sprache in einem Befehlszeilenprogramm?
Meinst du Sprache oder Skript? Wenn Sie "arabische Schrift" einschließlich der von Farsi verwendeten meinen, dann ist es möglich. Wenn du Sprache meinst, dann glaube ich nicht, dass Unicode diese Information unterstützt. –