2010-11-21 12 views
7

Javaにはどのような方法があるので、特定の言語(たとえばベンガル語またはアラビア語)のすべてのUnicode文字を取得できますか?Javaで言語のUnicode文字を取得する

+0

あなたは言語またはスクリプトを意味しますか?あなたがペルシア語で使用されているものを含む「アラビア語の脚本」を意味するなら、それは可能です。あなたが言語を意味するなら、私はUnicodeがその情報をサポートしているとは思わない。 –

答えて

16

java.lang.Characterクラスには、UnicodeBlockという内部静的クラスがあります。すべての文字を反復処理

Character.UnicodeBlock block = Character.UnicodeBlock.ARABIC; 

ことで(またはより正確には、Unicodeコードポイント)、発見するごとに確認するためのUnicodeのブロック可能です:あなたは、例えば、thuslyアラビア語Unicodeのブロックを取得することができます

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

良い点、マイケル。私は "スクリプト"を読むが、実際にはOPは "言語"と述べた。コードポイントは、最大で1つのスクリプトに属しますが、複数の言語に属することができます。 –

+0

助けてくれてありがとう。スイングコンポーネント(たとえばTextarea)に文字を表示するには別の質問があります。フォントを設定する必要がありますか、適切なフォントがインストールされていればスイングコンポーネントが正しくUnicode文字を表示できますか? –

4

1.7まで、JavaはUnicodeのスクリプトをサポートしていません。しかし、Javaには非常にスケッチなUnicodeプロパティのサポートがあります。それは基本的に、Unicodeの反エンパイア・インカネーションに固執しています。これは本当の問題です。彼らは、JDK7でUnicode 6に追いつくと主張していますが、私はまだ適切な財産的サポートを持っているという証拠は見ていません。ユニコード6.0で

、基本多言語面でのそれらの1020と全体のアラビア語としてカウント1051個のコード・ポイントがある:

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

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

unicharsプログラムはPerlで書かれていることである働く理由は、 Perlは常に優れた Unicodeプロパティをサポートしています。私はUnicode 6.0に対してこれを実行しています。 Unicodeの以前のリリースでは多少少なかったです。実際には、Unicode 6.0用に17の新しいアラビア文字が追加されました。

% 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}アリあります残りはすべて別物です。

しかし、すべてのブロックを見ても、いくつか見逃してしまいます。例:

% 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を使用します。それはまた、あなたの任意のコードポイントの特性を与えることができます。

% 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 

あなたがそれらを有用見つけた場合、あなたはunipropsunicharsプログラムのソースをダウンロードすることができます。グループに3分の1があります。uninamesすべての指示と例が付属しています。

これらのプロパティの一部がまだJavaで直接利用できない場合でも、必要に応じてPerlを使用してJavaコードを生成しても問題ありません。私はいつもそれを自分でやっています。 :)

関連する問題