2010-11-21 5 views
7

특정 언어 (예 : 벵골어 또는 아랍어)의 모든 유니 코드 문자를 얻을 수있는 방법이 Java에 있습니까?Java에서 언어의 유니 코드 문자 받기

+0

언어 또는 스크립트를 의미합니까? 페르시아어가 사용하는 것을 포함하여 "아랍어 대본"을 의미한다면 그렇습니다. 언어를 뜻한다면 유니 코드가 그 정보를 지원한다고 생각하지 않습니다. –

답변

16

java.lang.Character 클래스에는 UnicodeBlock이라는 내부 정적 클래스가 있습니다. 모든 문자를 통해 반복

Character.UnicodeBlock block = Character.UnicodeBlock.ARABIC; 

으로 (또는 더 정확하게, 유니 코드 코드 포인트)가 찾아 각을 확인하기 위해 유니 코드 블록 수 있습니다 : 당신은, 예를 들어, thusly 히 아랍어 유니 코드 블록을 얻을 수

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; 
} 
+1

그러나 이러한 블록은 언어가 아닌 * scripts *에 매핑됩니다. 동일한 스크립트가 여러 언어에서 사용되는 경우가 많으며 종종 실제로는 중복되는 하위 집합을 사용합니다. –

+0

좋은 지적입니다, 마이클. 나는 "script"를 읽었지만 실제로 OP는 "language"라고 말했다. 코드 포인트는 최대 하나의 스크립트에 속할 수 있지만 여러 언어에 속할 수 있습니다. –

+0

도움에 감사드립니다. 스윙 구성 요소 (예 : Textarea)에 문자를 표시하려면 또 다른 질문이 있습니다. 글꼴을 설정해야하거나 스윙 구성 요소가 적절한 글꼴이 설치되어 있으면 유니 코드 문자를 제대로 표시 할 수 있습니까? –

4

1.7까지 Java는 유니 코드 스크립트를 지원하지 않습니다. 자바는 매우 스케치 유니 코드 속성을 지원합니다. 그것은 기본적으로 유니 코드의 반신 반의 화신에 머물러 있습니다. 이것은 실제 문제입니다. 그들은 JDK7을 사용하여 유니 코드 6을 따라 잡을 것이라고 주장하지만, 적절한 속성을 지원한다는 증거는 아직 보지 못했습니다. 유니 코드 6.0

, 기본 다국어 평면에서 사람들의 1,020 전반적인 아랍어로 계산 1051 개 코드 포인트가 있습니다 :

% unichars --bmp '\p{Script=Arabic}' | wc -l 
    1020 

% unichars -a '\p{Script=Arabic}' | wc -l 
    1051 

unichars 프로그램은 Perl로 작성되어 있다는 것입니다 작동하는 이유는, Perl은 항상 우수한 유니 코드 속성을 지원합니다. 나는 유니 코드 6.0에 대해 실행하고있다. 유니 코드의 이전 릴리스에서는 다소 적었습니다. 사실, 17 개 새로운 아랍어 문자는 유니 코드 6.0 추가되었습니다

% unichars -a '\p{Script=Arabic}' '\p{Age:6.0}' | wc -l 
     17 

당신은 단지 이것에 대한 블록을 사용하려고 할 수 없습니다. 스크립트는 블록과 다릅니다. 주어진 블록의 모든 코드 포인트가 동일한 스크립트를 사용하는 것은 아닙니다. 똑같이 중요한 것은 주어진 스크립트의 문자가 이상한 블록에 흩어져있는 경우가 종종 있습니다.

% unichars '\p{InGreek}' '\P{IsGreek}'ˋ | wc -l 
    18 

그리고 아랍어 블록 (13)이 아닌 아랍어 문자 :

% unichars '\p{InArabic}' '\P{IsArabic}' | wc -l 
    13 

플러스 4 개 그리스어 블록이 있습니다

예를 들어

, 그리스 블록 (18)이 아닌 그리스어 문자가 있습니다 4 (또는 5) 아랍어 사람 :

% 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}\p{Greek_and_Coptic} 알리이다 ases,하지만 나머지는 모두 별개입니다.

하지만 블록을 모두 보더라도 일부는 놓칠 수 있습니다. 예 :

% 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 

문제점을 참조하십시오.

현재 모든 가능한 속성을 나열하는 것 이외에는 uniprops을 사용합니다. 그것은 또한 당신에게 주어진 코드 포인트의 속성을 제공 할 수 있습니다 : 당신이 그들을 유용 경우, unipropsunichars 프로그램의 소스를 다운로드 할 수 있습니다

% 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 

. 그룹에 1/3이 있습니다. uninames. 모두 지침과 예제가 함께 제공됩니다.

Java에서 해당 속성 중 일부를 직접 사용할 수 없더라도 원하는 경우 Perl을 사용하여 Java 코드를 생성하는 것이 좋습니다. 나는 항상 그것을 스스로한다. :)