2012-02-06 12 views
3

私はPythonでセットが中国の文字のすべてord()が含まれているしたいと思います:UTF-8で漢字の上限と下限は何ですか?

英語の場合と同等である:

english = set(range(ord('a'),ord('z') + 1) + 
       range(ord('A'),ord('Z') + 1)) 
+2

あなたはUTF-8で直接これを行うにはしたくありませんUnicodeコードポイントを生成し、* UTF-8に変換する必要があります。 –

+2

ここで必要なものを見つけることができます:http://unicode.org/charts/ –

+2

Hanziは、Unicode全体で複数の分離したセットにあります。 –

答えて

11

Unicode標準(バージョン6.0、セクション12.1)からは、表に示すように

ハン表意文字は、ユニコード規格の7つのブロックに発見され12-2

Table 12-2. Blocks Containing Han Ideographs 

Block         | Range  | Comment 
----------------------------------------+-------------+----------------------------------------------------- 
CJK Unified Ideographs     | 4E00–9FFF | Common 
CJK Unified Ideographs Extension A  | 3400–4DBF | Rare 
CJK Unified Ideographs Extension B  | 20000–2A6DF | Rare, historic 
CJK Unified Ideographs Extension C  | 2A700–2B73F | Rare, historic 
CJK Unified Ideographs Extension D  | 2B740–2B81F | Uncommon, some in current use 
CJK Compatibility Ideographs   | F900–FAFF | Duplicates, unifiable variants, corporate characters 
CJK Compatibility Ideographs Supplement | 2F800–2FA1F | Unifiable variants 

そして、エキストラのカップルは、これらのブロックの外に、あります

chinese = set(range(0x4E00, 0xA000) + 
       range(0x3400, 0x4DC0) + 
       range(0x20000, 0x2A6E0) + 
       range(0x2A700, 0x2B740) + 
       range(0x2B740, 0x2B820) + 
       range(0xF900, 0xFB00) + 
       range(0x2F800, 0x2FA20) + 
       range(0x9FA6, 0x9FCC)) 

Table 12-3. Small Extensions to the URO 

Range  | Version | Comment 
----------+---------+------------------------------------------------- 
9FA6–9FB3 | 4.1  | Interoperability with HKSCS standard 
9FB4–9FBB | 4.1  | Interoperability with GB 18030 standard 
9FBC–9FC2 | 5.1  | Interoperability with commercial implementations 
9FC3  | 5.1  | Correction of mistaken unification 
9FC4–9FC6 | 5.2  | Interoperability with ARIB standard 
9FC7–9FCB | 5.2  | Interoperability with HKSCS standard 

これらの順序値のセットを構築するために集合演算を使用するには、これを行うことができます

このセットには75000文字を超える文字が含まれているので、これは最もコンパクトで効率的なデータ構造ではないことに注意してください。

あなたはリテラル文字にORD()を使う、という場合も、あなたは32ビットのUnicodeリテラル形式を使用する必要があります。

>>> ord(u'\U00002F800') 
194560 
関連する問題